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