サブスクライバーの概要

このドキュメントでは、Cloud Pub/Sub でのサブスクリプションの動作の概要を説明します。pull 配信サブスクリプションの詳細については pull サブスクライバー ガイドを、push 配信サブスクリプションの詳細については push サブスクライバー ガイドをご覧ください。

トピックに公開されたメッセージを受信するには、そのトピックへのサブスクリプションを作成する必要があります。サブスクライバー アプリケーションで使用できるのは、サブスクリプションの作成後にトピックに公開したメッセージだけです。サブスクリプションにより、トピックとサブスクライバー アプリケーションが関連付けられます。このアプリケーションがそのトピックに公開されたメッセージを受信して処理します。トピックは複数のサブスクリプションを持つことができますが、特定のサブスクリプションは単一のトピックに属します。

サブスクリプションの作成と更新の詳細については、トピックとサブスクリプションの管理をご覧ください。

at-least-once 配信

Cloud Pub/Sub は、すべてのサブスクリプションについて、公開されたメッセージを 1 回以上配信します。ただし、この at-least-once 配信には例外がいくつかあります。

  • デフォルトでは、7 日間の最大保持期間内に配信できなかったメッセージは削除され、その後はアクセスできなくなります。通常、この状況はサブスクライバーがメッセージのフローについていけない場合に発生します。メッセージの保持期間は設定できます(範囲は 10 分から 7 日まで)。メッセージ保持設定の詳細については、メッセージの再生と破棄をご覧ください。
  • 特定のサブスクリプションが作成される前に公開されたメッセージは、通常は配信されません。そのため、サブスクリプションのないトピックに公開されたメッセージはサブスクライバーには配信されません。

メッセージがサブスクライバーに送信されたら、サブスクライバーはメッセージを確認応答する必要があります。メッセージは、配信のために送信された後、サブスクライバーが確認応答するまでは未処理と見なされます。Cloud Pub/Sub は、確認応答されていないメッセージの配信を繰り返し試行します。あるサブスクライバーについてメッセージが未処理であっても、Cloud Pub/Sub は同じサブスクリプション内の他のサブスクライバーにはメッセージを配信しません。サブスクライバーは、構成可能な限られた時間内(ackDeadline)で未処理のメッセージに確認応答する必要があります。この期限を過ぎたメッセージは未処理とは見なされなくなり、Cloud Pub/Sub はメッセージの再配信を試みます。

通常、Cloud Pub/Sub は各メッセージを公開された順序で 1 回配信します。ただし、メッセージが順不同で配信される場合や複数回配信される場合があります。通常、複数回の配信に対応するには、メッセージの処理時にサブスクライバーがべき等である必要があります。Cloud Pub/Sub メッセージ ストリームの処理は、1 回だけ Cloud Dataflow PubsubIO で実行できます。PubsubIO は、カスタム メッセージ ID や Cloud Pub/Sub で割り当てられた ID に対するメッセージの重複排除に使用されます。Cloud Dataflow で順次処理を行うには、サービスの標準並べ替え API を使用します。あるいは、登録するトピックのパブリッシャーがメッセージにシーケンス トークンを追加することもできます。詳細については、メッセージの順次処理をご覧ください。

pull 配信または push 配信

サブスクリプションでは、メッセージ配信に push または pull のメカニズムを使用できます。このメカニズムは、いつでも変更または構成できます。

pull サブスクリプション

pull 配信では、サブスクライバー アプリケーションが Cloud Pub/Sub サーバーに対してメッセージ取得のリクエストを開始します。

  1. サブスクライブしているアプリケーションは、メッセージの配信をリクエストする pull メソッドを明示的に呼び出します。
  2. Cloud Pub/Sub サーバーはメッセージ(キューが空の場合はエラー)と確認応答 ID でレスポンスします。
  3. サブスクライバーは、返された確認応答 ID を使用して acknowledge メソッドを明示的に呼び出し、受信を確認します。

pull サブスクリプション メッセージ リクエスト フロー

push サブスクリプション

Cloud Pub/Sub は、push 配信では、サブスクライバー アプリケーションにメッセージを配信する要求を開始します。

  1. Cloud Pub/Sub サーバーは、事前構成されたエンドポイントで、サブスクライバー アプリケーションに各メッセージを HTTPS リクエストとして送信します。
  2. エンドポイントは、HTTP 成功ステータス コードを返すことでメッセージに確認応答します。不成功のレスポンスは、メッセージを再送信する必要があることを示します。

push サブスクリプション メッセージ リクエスト フロー

Cloud Pub/Sub は、成功のレスポンスを受信するレートに基づいて、push リクエストのレートを動的に調整します。

次の表は、アプリケーションに適した配信メカニズムの選択に関するガイドを示しています。

pull push
  • メッセージが多い場合(1 秒間に 1 個超)。
  • メッセージ処理の効率とスループットが重要な場合。
  • 非自己署名 SSL 証明書を持つパブリック HTTPS エンドポイントの設定が現実的ではない場合。
  • 同じ webhook で処理する必要がある複数のトピック。
  • App Engine スタンダードおよび Cloud Functions のサブスクライバー。
  • Google Cloud Platform の依存関係(資格情報やクライアント ライブラリなど)が設定できない環境。

次の表に、pull 配信と push 配信の比較を示します。

  pull push
エンドポイント 承認済みの認証情報を持つインターネット上のデバイスが Cloud Pub/Sub API を呼び出すことができます。 非自己署名証明書を持つ HTTPS サーバーは、パブリック ウェブ上でアクセス可能です。受信エンドポイントは、Cloud Pub/Sub サブスクリプションから切り離すことができるので、複数のサブスクリプションからのメッセージを単一のエンドポイントに送信できます。
負荷分散 複数のサブスクライバーが、同じ「共有」サブスクリプションへの pull 呼び出しを作成できます。サブスクライバーごとにメッセージのサブセットを受信します。 push エンドポイントにはロードバランサを指定できます。
構成 構成は不要です。 サブスクライバーと同じプロジェクトでは、App Engine アプリへの構成が不要です。
他のすべてのエンドポイントには、Google Cloud Platform Console で push エンドポイントの構成(および確認)が必要です。エンドポイントには DNS 名から到達可能で、SSL 証明書がインストールされている必要があります。
フロー制御 サブスクライバー クライアントは配信レートを制御します。サブスクライバーは確認応答期限を動的に変更し、メッセージ処理期間を必要に応じて長くすることができます。 Cloud Pub/Sub サーバーはフロー制御を自動的に実装します。クライアント側でメッセージ フローを処理する必要はありません(クライアントが HTTP エラーを戻すことで、現在のメッセージ ロードを処理できないことを示すことはできます)。
効率とスループット バッチでの配信と確認応答に加えて非常に並列性の高い消費を可能にすることで、低い CPU と帯域幅で高いスループットを実現します。積極的なポーリングを使用してメッセージ配信時間を最小限に抑える場合には効率的でない場合があります。 リクエストごとに 1 つのメッセージを配信し、未処理メッセージの最大数を制限します。

サブスクリプションのライフサイクル

デフォルトでは、31 日間の非アクティブ期間(アクティブな接続、pull リクエスト、push の成功がない場合など)の後にサブスクリプションが期限切れになります。Cloud Pub/Sub がサブスクライバーのアクティビティを検出すると、サブスクリプション削除クロックが再起動されます。サブスクリプション有効期限ポリシー(ベータ版)を使用すると、非アクティブ期間を設定したり、アクティビティに関係なくサブスクリプションを永続化したりできます。サブスクリプションを手動で削除することもできます。

削除されたサブスクリプションと同じ名前のサブスクリプションを新しく作成することは可能ですが、その場合、新しいサブスクリプションは古いサブスクリプションとは無関係のものになります。削除されたサブスクリプションに多数の未確認メッセージがあっても、同じ名前の新しいサブスクリプションがその作成時にバックログを持つことはありません(配信待ちのメッセージは存在しません)。

サブスクリプションの操作の詳細については、サブスクリプションの構成をご覧ください。

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

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