すべてのプロダクト
Search
ドキュメントセンター

ApsaraMQ for RabbitMQ:デッドレターエクスチェンジ

最終更新日:Nov 09, 2025

ApsaraMQ for RabbitMQ のデッドレterエクスチェンジは、コンシューマーによって否定応答されたメッセージ、またはすべてのリトライ試行に失敗したメッセージを処理します。このトピックでは、デッドレターエクスチェンジのコアコンセプト、ルーティングプロセス、構成方法、および使用上の注意について説明します。また、関連トピックへのリンクも提供します。

コアコンセプト

  • デッドレターエクスチェンジ

    • デッドレterエクスチェンジは、バインディングキー、デッドレター ルーティングキー、およびヘッダー属性に基づいて、デッドレターメッセージをデッドレターキューにルーティングします。ダイレクトエクスチェンジなどの標準的なエクスチェンジタイプは、デッドレターエクスチェンジとして構成できます。

  • デッドレター ルーティングキー

    • デッドレターメッセージのルーティング方法を決定するルーティングキー。デッドレター ルーティングキーを指定しない場合、メッセージの元のルーティングキーが使用されます。

  • デッドレターメッセージ

    • デッドレターエクスチェンジに送信されるメッセージ。次のシナリオでは、メッセージがデッドレターエクスチェンジに送信されることがあります。

      • requeue パラメーターが false に設定され、コンシューマーが basic.reject または basic.nack を使用してメッセージの否定応答 (NACK) を送信します。

      • メッセージは 16 回再送信された後、コンシュームに失敗します。詳細については、「コンシューマーリトライポリシー」をご参照ください。

      • メッセージの有効期限が切れます。メッセージがキューに格納される時間が、指定されたメッセージ TTL を超えています。詳細については、「メッセージ TTL」をご参照ください。

  • デッドレターキュー

    • デッドレターメッセージを格納するためにデッドレターエクスチェンジにバインドされているキュー。

ルーティングプロセス

次のステップでは、デッドレターメッセージのルーティングプロセスについて説明します。

  1. プロデューサーがメッセージをエクスチェンジに送信します。

  2. エクスチェンジはメッセージをキューにルーティングします。

  3. コンシューマーはキューからメッセージをプルします。

  4. コンシューマーが否定応答した場合、または 16 回のリトライ後にコンシュームが失敗した場合、メッセージはデッドレターメッセージになります。

  5. キューは x-dead-letter-exchange パラメーターに基づいてデッドレターメッセージをデッドレターエクスチェンジに送信し、x-dead-letter-routing-key パラメーターに基づいてメッセージのデッドレター ルーティングキーを指定します。

  6. デッドレターエクスチェンジは、メッセージをデッドレターキューにルーティングします。

dg_dead_letter_message_flow

使用上の注意

  • ApsaraMQ for RabbitMQ では、vhost 間でデッドレターメッセージをルーティングすることはできません。デッドレterエクスチェンジとそれに対応するキューが同じ vhost に存在することを確認する必要があります。

  • ApsaraMQ for RabbitMQ の既存のキューのデッドレターエクスチェンジを変更することはできません。デッドレターエクスチェンジを変更するには、キューを削除し、更新された構成で新しいキューを作成する必要があります。

構成方法

ApsaraMQ for RabbitMQ では、次のいずれかの方法を使用してデッドレターエクスチェンジを構成できます。

コンソール

ApsaraMQ for RabbitMQ コンソールでキューを作成するときに、キューのデッドレターエクスチェンジを構成できます。

  1. ApsaraMQ for RabbitMQ コンソールにログインします。

  2. 概要 ページの リソース分布 セクションで、リージョンを選択します。

  3. インスタンスリスト ページで、管理するインスタンスの名前をクリックします。

  4. 左側のナビゲーションウィンドウで、キューリスト をクリックします。

  5. キューリスト ページの この vHost の横にある 切り替え ドロップダウンリストから vhost を選択し、キューの作成 をクリックします。

  6. キューの作成 パネルで、次のパラメーターを設定し、[OK] をクリックします。

    パラメーター

    説明

    使用上の注意

    キュー名

    キュー名。

    • 名前には、文字、数字、ハイフン (-)、アンダースコア (_)、ピリオド (.)、番号記号 (#)、スラッシュ (/)、およびアットマーク (@) を含めることができます。

    • 名前の長さは 1~255 文字である必要があります。

    • キューを作成した後、その名前を変更することはできません。キューの名前を変更する場合は、キューを削除して別のキューを作成します。

    • amq. は予約済みフィールドであり、エクスチェンジ名のプレフィックスとして使用することはできません。たとえば、amq.test をエクスチェンジの名前として使用することはできません。

    自動削除

    コンシューマーからキューへの最後のサブスクリプションがキャンセルされた後、キューが自動的に削除されるかどうかを指定します。

    • true: コンシューマーからこのキューへの最後のサブスクリプションがキャンセルされた後、キューは自動的に削除されます。

    • false: コンシューマーからこのキューへの最後のサブスクリプションがキャンセルされた後、キューは自動的に削除されません。

    詳細設定

    デッドレターエクスチェンジ、デッドレター ルーティングキー、メッセージ生存時間 (TTL) など、キューのその他のパラメーター。

    • DeadLetterExchange: デッドレターメッセージが配信されるエクスチェンジ。

    • DeadLetterRoutingKey: デッドレターメッセージのルーティングキー。デッドレターエクスチェンジは、ルーティングキーがデッドレターメッセージのルーティングキーと一致するキューにデッドレターメッセージを送信します。

    • MessageTTL: メッセージ TTL (ミリ秒単位)。指定されたメッセージ TTL 内にコンシュームされないメッセージはデッドレターメッセージであり、デッドレターエクスチェンジに送信されます。詳細については、「メッセージ TTL」をご参照ください。

API

CreateQueue API 操作を呼び出してキューを作成するときに、キューのデッドレターエクスチェンジを構成できます。詳細については、「CreateQueue」をご参照ください。

クライアント

ApsaraMQ for RabbitMQ クライアントでキューを宣言するときに、キューのデッドレターエクスチェンジを構成することもできます。

x-dead-letter-exchange パラメーターを使用してデッドレターエクスチェンジを指定し、x-dead-letter-routing-key パラメーターを使用してデッドレター ルーティングキーを指定します。

たとえば、some.exchange.name という名前の direct エクスチェンジを宣言するには、x-dead-letter-exchange パラメーターを使用してデッドレターエクスチェンジを指定し、x-dead-letter-routing-key パラメーターを使用して demo-routing-key をデッドレター ルーティングキーとして指定します。

Java のサンプルコード:

channel.exchangeDeclare("some.exchange.name", "direct");
Map<String, Object> args = new HashMap<String, Object>();
arguments.put("x-dead-letter-exchange", "some.exchange.name");
arguments.put("x-dead-letter-routing-key", "demo-routing-key");
channel.queueDeclare("MyQueue", false, false, false, arguments);

デッドレターヘッダー

デッドレターメッセージヘッダーには、次の情報が含まれます。

ヘッダー

説明

x-first-death-exchange

メッセージが最初にデッドレターメッセージになったときにメッセージが属するエクスチェンジ。

x-first-death-queue

メッセージが最初にデッドレターメッセージになったときにメッセージが属するキュー。

x-first-death-reason

メッセージが最初にデッドレターメッセージになった理由。

x-death-total

メッセージがデッドレターメッセージになった回数。

x-death

デッドレターメッセージに関するより詳細な情報を含む配列。

  • reason: メッセージがデッドレターメッセージになった理由。

  • queue: メッセージがデッドレターメッセージになったときにメッセージが属するキュー。

  • exchange: メッセージがデッドレターメッセージになったときにメッセージが属するエクスチェンジ。

  • routing-keys: メッセージがデッドレターメッセージになったときのメッセージのルーティングキー。

  • count: 指定された理由でメッセージがキュー内でデッドレターメッセージになった回数。

  • time: メッセージがデッドレターメッセージになった時刻。

考えられる理由には、次のものがあります。

  • expired: メッセージ TTL の有効期限が切れました。

  • nack: メッセージは `requeue` パラメーターを `false` に設定して否定応答 (NACKed) されました。

  • reject: メッセージは `requeue` パラメーターを `false` に設定して拒否されました。

  • コンシューム制限を超えました

デッドレターキューの TTL 機能を有効にする

デフォルトでは、デッドレターキュー内のメッセージの生存時間 (TTL) 機能は無効になっています。つまり、デッドレターキューに TTL が設定されていても、その中のメッセージは期限切れにならず、別のデッドレターキューにルーティングされません。コンソールでインスタンスに対してこの機能を有効にできます。有効にすると、デッドレターメッセージは、それらが存在するデッドレターキューの TTL 設定に従います。メッセージの TTL がデッドレターキューで期限切れになると、次に構成されたデッドレターエクスチェンジに転送されます。

インスタンスの制限

デッドレターキューの TTL 機能は、Serverless、Enterprise Edition (Subscription)、および Platinum Edition (Subscription) インスタンスで利用できます。

手順

  1. ApsaraMQ for RabbitMQ コンソールの インスタンスリスト ページで、ターゲットインスタンスの名前をクリックします。

  2. インスタンス詳細 ページで、インスタンス制限 タブをクリックします。

  3. デッドレターキューの TTL 機能をサポートしますか の横にある 有効化 をクリックして、デッドレterキューの TTL 機能を有効にします。

重要
  • デッドレターキューを構成するときは、メッセージループを作成しないように注意してください。たとえば、キュー B をキュー A のデッドレターキューとして設定し、キュー A をキュー B のデッドレターキューとして設定すると、デッドレター ルーティングループが作成されます。ループが検出され、ループ内でメッセージ拒否イベントが発生しない場合、影響を受けるメッセージの TTL 機能は無限ルーティングを防ぐために自動的に無効になります。

  • デッドレターメッセージは、キュー間で最大 16 回ルーティングできます。この制限に達すると、影響を受けるデッドレターメッセージの TTL 機能は無効になります。

詳細情報

デッドレターエクスチェンジの削除方法、またはデッドレターキューをデッドレターエクスチェンジにバインドする方法の詳細については、「エクスチェンジの管理」をご参照ください。