トピックにパブリッシュされたメッセージを受信するには、そのトピックへのサブスクリプションを作成する必要があります。サブスクライバー クライアントで使用できるのは、サブスクリプションの作成後にトピックにパブリッシュしたメッセージだけです。サブスクライバー クライアントは、トピックにパブリッシュされたメッセージを受信して処理します。トピックは複数のサブスクリプションを持つことができますが、特定のサブスクリプションは単一のトピックに属します。
トピック保持機能を使用すると、トピックに関連付けられたサブスクリプションが過去に遡ってシークし、以前に公開されたメッセージを再生できます。この機能の詳細については、メッセージの再生と消去のトピックをご覧ください。
サブスクリプションのワークフロー
メッセージがサブスクライバーに送信されたら、サブスクライバーはメッセージを確認応答する必要があります。
メッセージが配信のために送信され、サブスクライバーがまだ確認応答していない場合、メッセージは未処理と呼ばれます。
Pub/Sub は、まだ確認応答されていないメッセージの配信を繰り返し試行します。ただし、Pub/Sub は、同じサブスクリプションの他のサブスクライバーに未処理のメッセージを配信しようとしません。
サブスクライバーは、構成可能な限られた時間内(
ackDeadline
)で未処理のメッセージに確認応答する必要があります。この期限を過ぎたメッセージは未処理とはみなされなくなり、Pub/Sub はメッセージの再配信を試みます。
サブスクリプションの種類
サブスクリプションを作成するときは、メッセージ配信のタイプを指定する必要があります。 Pub/Sub には次のタイプのサブスクリプションが用意されています。
pull サブスクリプションは、サブスクライバー クライアントを使用して Pub/Sub サーバーにメッセージをリクエストします。
push サブスクリプションは、Pub/Sub サーバーを使用してサブスクライバー アプリケーションにリクエストを開始し、メッセージを配信します。
サブスクリプションをエクスポートすると、メッセージを Google Cloud リソースに直接エクスポートできます。これらのサブスクリプションには次のものが含まれます。
BigQuery サブスクリプションによって、BigQuery テーブルにデータをエクスポートします。
Cloud Storage サブスクリプションによって、Cloud Storage バケットにデータをエクスポートします。
ビジネス要件に適したサブスクリプションを選択するには、サブスクリプション タイプの選択をご覧ください。サブスクリプションの作成後はいつでも、サブスクリプションのメッセージ配信のタイプを更新できます。
デフォルトのサブスクリプション プロパティ
デフォルトでは、Pub/Sub は at-least-once(少なくとも 1 回)配信を提供しますが、すべてのサブスクリプション タイプで順序は保証されません。また、複数のメッセージが同じ順序指定キーを持ち、同じリージョンに存在している場合は、メッセージの順序指定を有効にできます。メッセージの順序設定プロパティを設定すると、Pub/Sub サービスでは同じ順序指定キーを使用して、Pub/Sub サービスでメッセージを受信する順序で配信されます。
Pub/Sub では 1 回限りの配信もサポートされています。
通常、Pub/Sub は各メッセージを公開された順序で 1 回配信します。ただし、メッセージが順不同で配信される場合や複数回配信される場合があります。Pub/Sub は、メッセージの確認応答リクエストが正常に返された後もメッセージを再配信する場合があります。この再配信は、サーバー側の再起動やクライアント側の問題などが原因で発生する可能性があります。そのため、まれにすべてのメッセージが再配信される可能性があります。
複数回の配信に対応するには、メッセージの処理時にサブスクライバーがべき等である必要があります。
サブスクリプションの有効期限
デフォルトでは、サブスクライバーが 31 日間使用されていない場合、またはサブスクリプションが更新されない場合、サブスクリプションは期限切れになります。サブスクライバーのアクティビティの例には、オープン接続、アクティブな pull、push の成功などがあります。Pub/Sub がサブスクライバーのアクティビティまたはサブスクリプション プロパティの更新を検出すると、サブスクリプション削除クロックが再起動されます。サブスクリプション有効期限ポリシーを使用すると、非アクティブ期間を構成することや、アクティビティに関係なくサブスクリプションを永続化することがきます。サブスクリプションを手動で削除することもできます。
削除されたサブスクリプションと同じ名前のサブスクリプションを新しく作成することは可能ですが、その場合、新しいサブスクリプションは古いサブスクリプションとは無関係のものになります。削除されたサブスクリプションに多数の確認応答されていないメッセージがあっても、同じ名前で作成された新しいサブスクリプションには、作成時にバックログはありません(配信待ちのメッセージは存在しません)。
次のステップ
ビジネス要件に合わせて、正しい種類のサブスクリプションを選択する。
各サブスクリプション タイプのワークフローを理解する。
さまざまなサブスクリプション プロパティについて読む。