サブスクライバーがメッセージを処理できない理由はいくつか考えられます。たとえば、サブスクライバーが必要なデータを取得する際に一時的な問題が発生したり、予期しない形式のメッセージを受信したりする可能性があります。
Pub/Sub がメッセージの配信を試みてもサブスクライバーによるメッセージの確認応答ができない場合、Pub/Sub はメッセージを自動的に再送信しようとします。この再配信の試みは、サブスクリプションの再試行ポリシーと呼ばれます。これは、オンまたはオフにできる機能ではありません。ただし、使用する再試行ポリシーのタイプは選択できます。
始める前に
- サブスクリプションの再試行ポリシーを含むサブスクリプションで使用するトピックを作成します。
必要なロール
トピックとサブスクリプションの管理に必要な権限を取得するには、プロジェクトに対する Pub/Sub 編集者(roles/pubsub.editor
)の IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
アクセス制御は、プロジェクト レベルと個々のリソースレベルで構成できます。あるプロジェクトにサブスクリプションを作成し、別のプロジェクトにあるトピックにアタッチできます。プロジェクトごとに必要な権限があることを確認します。
再試行ポリシーの種類
サブスクリプションを最初に作成して構成するときに、2 つの再試行ポリシー(即時再配信または指数バックオフ)のいずれかを選択できます。デフォルトでは、即時再配信が使用されます。
即時再配信
デフォルトでは、Pub/Sub はメッセージの再送信(同じサブスクライバー クライアントへの場合もあります)を直ちに試行します。ただし、メッセージの確認応答を防止する条件が変更されていない場合、すぐに再配信を行うと問題が発生する可能性があります。この場合、確認応答できない複数のメッセージを Pub/Sub が再送信する可能性があります。
即時再配信の問題に対処するため、Pub/Sub では指数バックオフ ポリシーを構成できます。
指数バックオフ
指数バックオフを使用すると、再試行の間の遅延を徐々に長くすることができます。最初の配信が失敗すると、Pub/Sub は最小バックオフ時間だけ待機してから再試行します。メッセージが連続して失敗するたびに、最大遅延時間(0 ~ 600 秒)に達するまで遅延時間が長くなります。
再試行の間隔の下限と上限は固定ではありません。アプリケーション特有の要因に基づいて設定する必要があります。
指数バックオフについては、次の点を考慮してください。
- 次のアクションによって指数バックオフがトリガーされます。
- 否定確認応答を受け取った場合。
- メッセージの確認応答期限が切れた場合。
- 指数バックオフは、サブスクリプション内のすべてのメッセージ(グローバル)ではなく、メッセージ単位でのみ適用されます。
- 指数バックオフの使用中は、以前のメッセージが否定確認応答を受信しても、Pub/Sub は引き続き他のメッセージを配信します(順序付きメッセージ配信を使用している場合を除きます)。
再試行ポリシーを使用して、メッセージのサブセットの配信と処理を遅らせ、配信時に一部のメッセージを一時的に処理できないことに対処します。この機能はベスト エフォート方式で適用され、各メッセージが個々の再試行ポリシーに対して評価されます。
この機能を使用してメッセージ配信に意図的な遅延を導入することはおすすめしません。再試行ポリシーで構成されているサブスクリプションで多数のメッセージを否定応答した場合、それらのメッセージの一部は、少ないバックオフまたはバックオフなしで配信される可能性があります。また、多数のメッセージを否定応答した場合、Pub/Sub によってすべてのメッセージの配信速度が遅くなることがあります。
配信をスケジュールする必要がある場合は、Cloud Tasks の使用を検討してください。
指数バックオフを構成する
コンソール
新しいサブスクリプションを作成する際に、次の手順に沿って指数バックオフ再試行ポリシーを構成できます。
- Google Cloud コンソールで、Pub/Sub の [サブスクリプション] ページに移動します。
[サブスクリプションを作成] をクリックします。
[サブスクリプション ID] フィールドに名前を入力します。
サブスクリプションの指定方法については、トピックまたはサブスクリプションの指定方法のガイドラインをご覧ください。
- プルダウン メニューからトピックを選択するか、作成します。
サブスクリプションがトピックからメッセージを受信します。
[配信タイプ] を選択します。
[再試行ポリシー] で、[指数バックオフ後の再試行] を選択します。
[最小バックオフ] と [最大バックオフ] に 0 ~ 600 秒の値を入力します。
デフォルト値は最小バックオフでは 10 秒、最大バックオフでは 600 秒です。
- [作成] をクリックします。
gcloud
指数バックオフの再試行ポリシーを使用して新しいサブスクリプションを作成するには、次の gcloud pubsub create
コマンドを実行します。
gcloud pubsub subscriptions create SUBSCRIPTION_ID \ --topic=TOPIC_ID \ --min-retry-delay=MIN_RETRY_DELAY \ --max-retry-delay=MAX_RETRY_DELAY
次のように置き換えます。
SUBSCRIPTION_ID
: サブスクリプションの一意の ID。TOPIC_ID
: サブスクリプションを関連付けるトピックの ID。MIN_RETRY_DELAY
: サブスクリプションの最小バックオフ遅延。MAX_RETRY_DELAY
: サブスクリプションの最大バックオフ遅延。