0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

cloud pubsubで配信済みのメッセージを再送する

Posted at

pubsubのサブスクライバ側でat-only-once対策として過去に受け取ったメッセージはスルーする処理を実装しました。
実装したのでちゃんと動くかテストをしようと思いましたが、同じメッセージが複数送られるまで待つのは現実的ではありません。

同じmessage_idを意図的に再送できないか調べると、どうやらseek機能を使うことで配信済みメッセージを未配達として再度処理できるようです。

gcloud Consoleでポチポチしてseekさせる

スクリーンショット 2019-10-10 1.22.50.png
↑ここから設定できます。

  • テストしたいメッセージを配信する
  • 再送させたいメッセージが配信される以前の時刻を指定してシークさせる

もしくは

  • サブスクリプションのスナップショットを作成
  • テストしたいメッセージを配信する
  • スナップショットまでシークさせる

以上の操作でメッセージが再送されます。

なんで再送されるのか

配信されたメッセージはサブスクリプション側で「確認済み」ステータスになります。
特定の時間までseekさせるとseek時点以前のメッセージは「確認済み」ステータスに、以後のメッセージは「未確認(未配信)」となります。

あるサブスクリプションが

時間 message_id ステータス
00:00 000000000000001 確認済み
00:05 000000000000002 確認済み
00:10 000000000000003 確認済み

の時に00:03にseekさせると

時間 message_id ステータス
00:00 000000000000001 確認済み
00:05 000000000000002 未確認
00:10 000000000000003 未確認

となり、message_id:000000000000002と000000000000003のmessageが再送されます。
この時message_idは同じものが付与されるため、at-only-once現象を擬似的に再現できました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?