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

ApsaraMQ for MQTT:リトライポリシーとデッドレターキュー

最終更新日:Mar 11, 2026

Message Integration でのメッセージ配信の失敗は、データ損失や処理遅延を引き起こす可能性があります。リトライポリシーは、失敗した配信を自動的にリトライします。デッドレターキュー (DLQ) は、配信不能なメッセージを検査と再処理のために捕捉します。

仕組み

メッセージ配信が失敗すると、Message Integration は構成されたリトライポリシーを適用します。すべてのリトライが上限に達した場合、フォールトトレランスポリシーが次に何が起こるかを決定します。

Message delivery fails
        |
        v
  Retry policy applies
  (backoff or exponential decay)
        |
        v
  All retries exhausted?
    |           |
    No          Yes
    |           |
    v           v
  Retry     Fault tolerance policy?
  again       |              |
          Allowed        Prohibited
              |              |
              v              v
        DLQ configured?   Task status -> Ready
          |         |     (processing stops)
         Yes        No
          |         |
          v         v
      Send to     Discard
       DLQ        message
説明

システムがリトライをまったく試行できない場合 (例えば、無効なリソース構成が原因の場合)、タスクステータスは [Start Failed] に変更され、通常のリトライフローは適用されません。

リトライポリシー

リトライポリシーは、Message Integration が失敗した配信をどのようにリトライするかを決定します。2つのポリシーが利用可能です。

ポリシー動作最大リトライ回数リトライ間隔合計リトライウィンドウ
バックオフ再試行 (デフォルト)固定ランダム間隔3各10~20秒のランダム約60秒
指数減衰再試行増加する間隔1761秒から始まり、最大512秒まで倍増1日

バックオフ再試行

バックオフ再試行はデフォルトポリシーです。システムは、失敗したメッセージを最大3回、各試行間に10~20秒のランダムな間隔を置いてリトライします。

迅速な失敗検出が必要な場合、および失敗したメッセージをDLQに到達させるか、フォールトトレランスを迅速にトリガーしたい場合に、バックオフ再試行を使用します。

指数減衰再試行

指数減衰再試行は、試行間の待機時間を増加させます。間隔は1秒から始まり、各リトライで倍増し、最大512秒になります。完全な間隔シーケンスは次のとおりです。

1s, 2s, 4s, 8s, 16s, 32s, 64s, 128s, 256s, 512s

512秒に達した後、システムは残りの167回の試行について512秒間隔でリトライを続行し、1日で合計176回のリトライとなります。

ダウンストリームシステムが自力で回復する可能性がある場合に、指数減衰再試行を使用します。このポリシーは、DLQへのルーティングの前に配信成功の可能性を最大化します。

リトライポリシーの選択

シナリオ推奨ポリシー理由
ダウンストリーム障害が通常は永続的である場合 (例: 無効なメッセージフォーマット)バックオフ再試行迅速な失敗を検出し、手動点検のためにDLQにルーティングします。
ダウンストリーム障害が通常は一時的である場合 (例: 一時的なサービス停止)指数減衰再試行ダウンストリームシステムが回復する時間を与えます。
メッセージ損失が許容できず、ダウンストリームの回復が期待される場合指数減衰再試行 + フォールトトレランス禁止処理停止を最終的な安全策とする最大リトライカバー率。
高いメッセージスループットがあり、DLQベースの再処理が導入されている場合バックオフ再試行 + フォールトトレランス許可リトライオーバーヘッドを最小限に抑え、DLQを介して障害を処理します。

フォールトトレランスポリシー

フォールトトレランスポリシーは、すべてのリトライが上限に達した後に何が起こるかを決定します。2つのポリシーが利用可能です。

フォールトトレランス許可

すべてのリトライ後にメッセージが失敗した場合でも、イベント処理は続行されます。失敗したメッセージは次のいずれかです。

  • デッドレターキューが構成されている場合、デッドレターキューに配信されます。

  • デッドレターキューが構成されていない場合、破棄されます。

時折のメッセージ損失が許容できる場合、またはDLQベースの再処理ワークフローが導入されている場合に、このモードを使用します。

フォールトトレランス禁止

すべてのリトライ後にメッセージが失敗した場合、イベント処理は停止します。タスクステータスは [Ready] に変更され、問題を解決するまで、それ以上のメッセージは処理されません。

すべてのメッセージが配信される必要があり、メッセージ損失が許容できない場合に、このモードを使用します。

デッドレターキュー

デッドレターキュー (DLQ) は、すべてのリトライが上限に達した後に失敗したメッセージを捕捉します。システムは生メッセージデータをDLQに送信し、そこで検査または再処理できます。DLQ機能はデフォルトで無効になっています。失敗したメッセージの捕捉を開始するには、タスクレベルで有効にします。

サポートされているDLQターゲット

サービスターゲットタイプ
ApsaraMQ for RocketMQキュー
Simple Message Queue (旧称:MNS)キュー
ApsaraMQ for Kafkaキュー
EventBridgeイベントバス

デッドレターメッセージの処理

メッセージがDLQに到達した後、次のステップを実行します。

  1. 障害原因を特定します。タスクログとDLQ内の生メッセージデータを確認します。障害がダウンストリームサービスエラー、無効なメッセージフォーマット、または権限の問題によって引き起こされたかどうかを判断します。

  2. 根本原因を解決します。ダウンストリームサービスの復元、メッセージフォーマットの修正、または権限の更新など、根本的な問題を修正します。

  3. メッセージを再処理します。DLQからメッセージを消費し、元のターゲットに再送信するか、代替パスを介して処理します。

説明

失敗したメッセージを迅速に検出するために、DLQでモニタリングを設定します。例えば、DLQターゲットサービス内のメッセージ数に基づいてアラートを設定し、見過ごされたメッセージ蓄積を回避します。