クイックスタート: メッセージの再生

このガイドでは、Cloud Pub/Sub API のメッセージを再生する例を紹介します。

gcloud コマンドライン インターフェースを使用する

gcloud を使用する最も簡単な方法は Cloud Shell です。Cloud SDK に付属のコマンドライン ツールを使用することもできます。Cloud SDK の設定要件は、Compute Engine マシンのインスタンスを新規作成するときにアクセス スコープにすべての Cloud API とデフォルトの Debian イメージを含めれば自動的に満たされます。これを作成するには Compute Engine の UI を使うのが最も簡単です。以降の説明では、以上のコマンドライン ツールのどれかを使用するものと仮定します。

gcloud の詳しい使い方は、gcloud のクイックスタートをご覧ください。gcloud リファレンスgcloud pubsub セクションも参照してください。Cloud Pub/Sub gcloud のコマンドの完全なリストが掲載されています。

スナップショットを作成してシークする

トピックとサブスクリプションを作成します。インタラクティビティを高めるため、確認応答期限を短く設定します。

alias pubsub='gcloud beta pubsub'
pubsub topics create seek-demo-topic
pubsub subscriptions create seek-demo-sub --topic=seek-demo-topic --ack-deadline=10

今のところ、サブスクリプション内に確認済みのメッセージはありません。この状態を取得するためにスナップショットを作成します。

pubsub snapshots create my-snapshot --subscription=seek-demo-sub
pubsub snapshots list

メッセージを公開し、pull し、確認します。

pubsub topics publish seek-demo-topic --message 'hello, world'
pubsub subscriptions pull --auto-ack seek-demo-sub

なお、以降の pull でメッセージは生成されません(一時的な複製はあり得る)。

pubsub subscriptions pull --auto-ack seek-demo-sub

メッセージを回復するには、サブスクリプションをスナップショットまでシークします。メッセージがすぐに配信されない可能性があることにご注意ください。Pub/Sub はメッセージの配信のレイテンシを保証していません。ただし、スナップショットに保持されているメッセージは最終的に少なくとも 1 回は確実に配信されます。

pubsub subscriptions seek seek-demo-sub --snapshot=my-snapshot
pubsub subscriptions pull seek-demo-sub --auto-ack

なお、サブスクリプションのトピックがスナップショットのトピックと同じであれば、他のサブスクリプションを同じスナップショットまでシークしてもかまいません。

pubsub subscriptions create seek-demo-sub2 --topic=seek-demo-topic --ack-deadline=10
pubsub subscriptions seek seek-demo-sub2 --snapshot=my-snapshot

seek-demo-sub2 から pull 操作を行うと、seek-demo-sub2 の作成以前に公開されたメッセージが生成されます。

pubsub subscriptions pull seek-demo-sub2 --auto-ack

使い終わったスナップショットをクリーンアップします。

pubsub snapshots delete my-snapshot

特定のタイムスタンプまでシークする

確認済みのメッセージを再生する別の方法があります。特定のタイムスタンプまでシークするという方法です。特定のタイムスタンプまでシークするには、確認済みのメッセージが retain-acked-messages に基づいて保持されるように最初にサブスクリプションを構成する必要があります。メッセージはデフォルトで 7 日間保持されます。この期間をこれよりも短く設定するには message-retention-duration を使用します(ただし、10 分より短くはできません)。詳細は、「メッセージの再生と破棄」のサブスクリプションの構成を参照してください。

このステップが必要になるのは、スナップショットではなくタイムスタンプまでシークする場合だけです。

pubsub subscriptions update seek-demo-sub --retain-acked-messages

メッセージを公開し、pull し、確認します。

pubsub topics publish seek-demo-topic --message 'hello, world'
pubsub subscriptions pull --auto-ack seek-demo-sub

次の pull でメッセージは返されないはずです。

pubsub subscriptions pull seek-demo-sub

さて、以前の時刻までシークしてメッセージを回復しましょう。GNU 版と BSD(MacOS)版で date コマンドの日付演算フラグが異なることにご注意ください。

TS_FORMAT=%Y-%m-%dT%H:%M:%SZ
pubsub subscriptions seek seek-demo-sub --time=$(date -u -d '-10 min' +$TS_FORMAT)

その後の pull でメッセージは再度生成されます。

pubsub subscriptions pull --auto-ack seek-demo-sub

ある時点(現在の時刻など)より以前に公開されたすべてのメッセージの配信をシークでスキップすることもできます。具体的には、サブスクリプションを現在の時刻までシークして過去のすべてのメッセージを「確認済み」とマークします。

pubsub topics publish seek-demo-topic --message 'hello, world'
pubsub subscriptions seek seek-demo-sub --time=$(date -u +$TS_FORMAT)

伝播に要する遅延時間(60 秒ほど)が経過すると、メッセージは配信されなくなります。これを確認するには、pull コマンドを何回か実行し、その都度、メッセージへの確認応答を返さないようにします。

pubsub subscriptions pull seek-demo-sub

Cloud Console を使用する

Cloud Console のサブスクリプションに関する詳細ページで、スナップショットの作成や既存のスナップショットへのシークを行うことができます。スナップショットの命名規則については、「リソース名」を参照してください。

このシーク ダイアログで、時刻へのシークかスナップショットへのシークかを選択できます。

各トピックの詳細ページでスナップショットを管理することもできます。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Cloud Pub/Sub ドキュメント