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

ApsaraMQ for RocketMQ:デッドレターメッセージ

最終更新日:Jun 22, 2026

メッセージの消費に失敗すると、メッセージリトライが自動的にトリガーされます。最大リトライ回数に達してもメッセージの消費に失敗し続ける場合、そのメッセージはデッドレターメッセージになります。ApsaraMQ for RocketMQ では、これらのデッドレターメッセージを指定したトピックに保存し、その後のビジネスリカバリや遡及的分析に利用できます。このトピックでは、デッドレターメッセージの利用シーン、デッドレターポリシー、制限事項、設定方法、および注意事項について説明します。

利用シーン

  • デッドレターメッセージの典型的な処理シーン

    メッセージリトライが失敗した後、デッドレターメッセージを指定のデッドレタートピックに保存します。別のコンシューマーグループを作成してこれらのメッセージを消費・処理することで、エラーパスの処理やデッドレター分析が可能になります。

  • デッドレターメッセージの典型的な誤用

    デッドレターメッセージを複数のレイヤーを経由してルーティングしたり、元のトピックにダンプバックしたりすると、リトライのループに再突入する可能性があります。これにより、雪崩効果が引き起こされることがあります。

デッドレターポリシー

メッセージがデッドレターになるとき

メッセージが最大リトライ回数に達しても正常に消費されない場合、そのメッセージは配信を停止し、デッドレターメッセージになります。

死信消息

デッドレターメッセージの保持ルール

ApsaraMQ for RocketMQ では、デフォルトで、デッドレターメッセージは保持されず、デッドレター状態になった後に破棄されます。

コンソールでデッドレターメッセージの保持を有効にできます。有効にすると、デッドレターメッセージはデッドレタートピックと呼ばれる指定のトピックに保存されます。詳細については、「デッドレターメッセージの保持ルールの設定」をご参照ください。

デッドレターメッセージは、新しいメッセージとしてデッドレタートピックに保存されます。そのプロパティは次のように変更されます:

  • メッセージ ID:デッドレターメッセージがデッドレタートピックに保存される際に、新しいメッセージ ID が生成されます。

  • ユーザー定義属性、メッセージ本文、およびその他のユーザー提供情報は変更されません。

  • デッドレターメッセージの保存期間は、デッドレタートピックに入った時点からカウントが開始されます。たとえば、メッセージが 13:00:00 にサーバーに送信され、2 時間後 (15:00:00) に消費とリトライに失敗した場合、その保存期間は 15:00:00 から始まります。

制限事項

  • デッドレタートピックは、通常メッセージトピックまたは順序付きメッセージトピックである必要があります。トランザクションメッセージトピックおよびスケジュールメッセージトピックは、デッドレタートピックとして使用できません。

  • 元のメッセージのトピックをデッドレタートピックとして使用することはできません (循環リトライと雪崩効果を防ぐため)。転送中にシステムがデッドレタートピックと元のトピックが一致することを検出した場合、メッセージは破棄されます。

  • 異なるトピックからのデッドレターメッセージを、同じデッドレタートピックに保存できます。

  • コンシューマーグループを削除しても、関連付けられたデッドレタートピックは削除されません。

  • トピックがデッドレターポリシーによって参照されている場合、そのトピックを削除する前にこのポリシーを削除する必要があります。

デッドレターメッセージの保持ルールの設定

ApsaraMQ for RocketMQコンソールで、デッドレターメッセージを保持するかどうかを設定できます。

この設定にアクセスするには:

  1. インスタンス数 ページで、ターゲットインスタンス名をクリックします。

  2. 左側のナビゲーションウィンドウで グループ をクリックします。グループ ページで、グループの作成 をクリックします。

[グループの作成] ダイアログボックスで、[詳細設定] セクションを展開して、[消費リトライポリシー] (デフォルト:エクスポネンシャルバックオフ)、[最大リトライ回数] (デフォルト:16)、および [デッドレターメッセージの保持] トグルスイッチを設定します。このトグルスイッチがオフの場合、リトライ上限を超えたメッセージは破棄されます。

デッドレターメッセージの可観測性メトリック

メトリックの説明

メトリックタイプ

メトリック

メトリックメタデータ

rocketmq_send_to_dlq_messages:1分あたりのデッドレター状態になるメッセージ数

Cloud Monitor メトリック

  • 1分あたりのデッドレター状態になるメッセージ数 (GroupId & Topic 別):SendDLQMessageCountPerGid

  • 1分あたりのデッドレター状態になるメッセージ数 (GroupId 別):SendDLQMessageCountPerGidTopic

メトリックの使用

ApsaraMQ for RocketMQ は、デッドレターメッセージのアラート設定をサポートしています。これにより、ビジネスフィードバックが発生する前に異常を検出し、さらにダッシュボードのメトリックを確認してその原因を特定するのに役立ちます。

  • 利用シーン 1:1分あたりのデッドレター状態になるメッセージ数を表示する

    [ダッシュボード] で、[1分あたりのデッドレター状態になるメッセージ数] のゲージを確認します。また、[Cloud Monitor] を使用して、[1分あたりのデッドレター状態になるメッセージ数 (GroupId & Topic)] のアラートを設定することもできます。

  • 利用シーン 2:未処理のデッドレターメッセージがいくつ残っているかを確認する

    デッドレターメッセージが指定のトピックに保存された後、[ダッシュボード] でそのデッドレタートピックの [消費のバックログ] メトリックを表示します。または、[Cloud Monitor] を使用して、[メッセージのバックログ (GroupId & Topic)] のアラートを作成することもできます。

ベストプラクティス

コンシューマーが元のトピック情報を取得する方法

  • オプション 1:各デッドレタートピックを元のトピックと 1 対 1 でマッピングする。

    たとえば、元のトピックが testTopic の場合、デッドレタートピックを DLQ-testTopic と命名します。

  • オプション 2:元のトピック名をカスタムメッセージ属性に埋め込む。例:

    messageBuilder.addProperty("originalTopic","testTopic")

デッドレター処理を主要なビジネスロジックから分離する

デッドレターメッセージは、通常のビジネスフローでリトライしても失敗したメッセージです。通常の操作を妨げないように、これらは個別に処理してください。

  • デッドレタートピックは、元のメッセージトピックとは異なる必要があります。元のトピックを再利用すると、デッドレターメッセージが消費ループに再突入し、通常のコンシューマーグループをブロックして雪崩効果を引き起こす可能性があります。

  • 主要な本番フローのコンシューマーグループを使用してデッドレターメッセージを消費しないでください。これは通常のメッセージ処理を妨げる可能性があります。

参考

消費リトライ