サブスクライバーは、さまざまな理由でメッセージを処理できない場合があります。たとえば、メッセージの処理に必要なデータを取得する際に一時的な問題が発生している可能性があります。サブスクライバーが想定していない形式のメッセージが含まれている場合もあります。
サブスクライバーが確認応答できない配信不能メッセージを管理するために、Pub/Sub はこれらのメッセージをデッドレター トピック(デッドレター キューとも呼ばれます)に転送できます。
始める前に
デッドレター トピック構成のトピックを作成します。
また、このページの手順をすべて実行する場合は、後続のステップでトピックを作成できます。
必要なロール
トピックとサブスクリプションの管理に必要な権限を取得するには、プロジェクトに対する Pub/Sub 編集者 (roles/pubsub.editor)の IAM ロールを付与するように管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
アクセス制御は、プロジェクト レベルと個々のリソースレベルで構成できます。あるプロジェクトにサブスクリプションを作成し、別のプロジェクトにあるトピックにアタッチできます。プロジェクトごとに必要な権限があることを確認します。
デッドレター トピックの仕組み
サブスクライバー アプリケーションがメッセージを確認応答できない場合、Pub/Sub は確認応答期限に達するか、メッセージの有効期限が切れるまで配信を再試行します。構成された配信試行回数に達すると、Pub/Sub は配信不能メッセージをデッドレター トピックに転送できます。
Pub/Sub が配信不能メッセージを転送すると、元のメッセージが新しいメッセージでラップされ、送信元サブスクリプションを識別する属性が追加されます。メッセージは、指定されたデッドレター トピックに送信されます。デッドレター トピックにアタッチされた別のサブスクリプションは、転送されたメッセージを受信して分析し、オフラインでデバッグできます。
配信の最大試行回数の計算方法
Pub/Sub は、デッドレター トピックが正しく構成され、正しい IAM 権限が含まれている場合にのみ、配信の試行回数をカウントします。
Pub/Sub では、ベスト エフォート方式でメッセージが転送されるため、配信の最大試行回数には誤差が生じる場合があります。サービスは、構成された試行回数よりも少ない回数でメッセージを転送したり、転送前に数回配信を試行したりする場合があります。
特に、非アクティブなサブスクライバーを持つ pull サブスクリプションの場合、メッセージの配信試行回数はゼロにリセットされることもあります。その結果、構成された最大配信試行回数を超えて、サブスクライバー クライアントにメッセージが配信される可能性があります。
デッドレター トピックのプロパティ
デッドレター トピックには、次のサブスクリプション プロパティを設定できます。
配信試行回数の上限: Pub/Sub が特定のメッセージに対して行う配信の試行回数を示す数値。構成された配信試行回数内にサブスクライバー クライアントがメッセージを確認応答できない場合、メッセージはデッドレター トピックに転送されます。
- デフォルト値 = 5
- 最大値 = 100
- 最小値 = 5
デッドレター トピックを含むプロジェクト: デッドレター トピックがサブスクリプションとは異なるプロジェクトにある場合、そのデッドレター トピックがあるプロジェクトを指定する必要があります。サブスクリプションが接続されているトピックとは異なるトピックに、デッドレター トピックを設定します。
デッドレター トピックを構成する
次の手順では、デッドレター トピックを使用するワークフローについて説明します。
トピックを作成します(デッドレター トピックとして使用するため)。
デッドレター トピックのサブスクリプションを作成します。
サブスクリプションでデッド レタリングを有効にします。
先ほど作成したトピックをサブスクリプションに関連付けます。
デッドレター トピックを使用するために必要なロールを Pub/Sub サービス アカウントに付与します。
デッドレター トピックで使用するトピックを作成する
サブスクリプションに使用するトピックをすでに作成している場合は、この手順をスキップできます。
Google Cloud コンソールで、[トピック] ページに移動します。
[トピックを作成] をクリックします。
トピック ID を入力します(例:
my-test-topic)。デフォルトのサブスクリプションのオプションを保持し、[作成] をクリックします。
サブスクリプションにデッドレター トピックを設定する
デッドレター トピックは、新しいサブスクリプションまたは既存のサブスクリプションに設定できます。
新しいサブスクリプションにデッドレター トピックを設定する
Google Cloud コンソール、Google Cloud CLI、クライアント ライブラリ、または Pub/Sub API を使用して、サブスクリプションを作成してデッドレター トピックを設定できます。
コンソール
サブスクリプションを作成してデッドレター トピックを設定するには、次の手順を実行します。
Google Cloud コンソールで、[サブスクリプション] ページに移動します。
[サブスクリプションを作成] をクリックします。
[サブスクリプション ID] を入力します。
定期購入で使用するトピックを選択します。サブスクリプションがトピックからメッセージを受信します。これはデッドレター トピックではありません。これは次のステップで選択します。
[配信エラー]セクションで、[配信エラーを有効にする]を選択します。
プルダウン メニューからデッドレター トピックを選択します。
選択したデッドレター トピックにサブスクリプションがない場合、サブスクリプションを作成するように求められます。
[配信の最大試行回数] フィールドで、5〜100 の整数を指定します。
[作成] をクリックします。
[詳細パネル] をクリックして、実行可能なアクション アイテムを確認します。いずれかの項目にエラーアイコン が表示されている場合は、アクション アイテムをクリックして問題を解決します。
![[デッド レタリング] タブにアクション アイテムが表示されている。](/https://docs.cloud.google.com/static/pubsub/images/deadletter-issues.png?hl=ja)
gcloud
サブスクリプションを作成してデッドレター トピックを設定するには、gcloud pubsub subscriptions create コマンドを使用します。
gcloud pubsub subscriptions create subscription-id \ --topic=topic-id \ --dead-letter-topic=dead-letter-topic-name \ [--max-delivery-attempts=max-delivery-attempts] \ [--dead-letter-topic-project=dead-letter-topic-project]
C++
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の C++ の設定手順を実施してください。詳細については、Pub/Sub C++ API リファレンス ドキュメントをご覧ください。
C#
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の C# の設定手順を実施してください。詳細については、Pub/Sub C# API リファレンス ドキュメントをご覧ください。
Go
次のサンプルでは、Go Pub/Sub クライアント ライブラリのメジャー バージョン(v2)を使用しています。v1 ライブラリをまだ使用している場合は、v2 への移行ガイドをご覧ください。v1 コードサンプルの一覧については、 非推奨のコードサンプルをご覧ください。
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Go の設定手順を実施してください。詳細については、Pub/Sub Go API のリファレンス ドキュメントをご覧ください。
Java
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Java の設定手順を実施してください。詳細については、Pub/Sub Java API リファレンス ドキュメントをご覧ください。
Node.js
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Node.js の設定手順を実施してください。詳細については、Pub/Sub Node.js API リファレンス ドキュメントをご覧ください。
Node.js
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Node.js の設定手順を実施してください。詳細については、Pub/Sub Node.js API リファレンス ドキュメントをご覧ください。
PHP
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の PHP の設定手順を実施してください。詳細については、