ApsaraMQ for RocketMQ内のメッセージが再試行の最大数に達してもまだ消費されない場合、メッセージはデットレターメッセージになり、デットレターキューに転送されます。 問題をトラブルシューティングした後、無効なメッセージを再送信して消費することができます。 無効メッセージを処理できない場合は、メッセージをエクスポートして保存し、有効期限が切れた後に削除されないようにすることができます。
背景情報
メッセージの使用に失敗した場合、ApsaraMQ for RocketMQは自動的にメッセージを再試行します。 再試行の最大数に達してもメッセージがまだ消費されない場合、コンシューマーは期待どおりにメッセージを消費できません。 この場合、ApsaraMQ for RocketMQは、コンシューマー用に指定された特別なキューにメッセージを送信します。 詳細については、「メッセージの再試行」をご参照ください。
ApsaraMQ for RocketMQでは、期待どおりに消費できないメッセージは無効メッセージと呼ばれます。 デットレターメッセージを格納するために使用されるキューは、デットレターキューと呼ばれます。
特徴
デッドレターのメッセージには、次の特徴があります。
デッドレターメッセージは、消費者の期待どおりに消費できなくなりました。
デフォルトでは、無効メッセージの有効期間は3日です。これは、通常のメッセージの有効期間と同じです。 失効したメッセージは自動的に削除されます。 デットレターメッセージが生成されてから3日以内に処理することを推奨します。
デッドレターキューには、次の特徴があります。
各デットレターキューは、コンシューマインスタンスではなくコンシューマグループに対応します。
コンシューマーグループで着信履歴メッセージが生成されない場合、ApsaraMQ for RocketMQはコンシューマーグループの着信履歴キューを作成しません。
デットレターキューには、メッセージが属するトピックに関係なく、対応するグループで生成されたすべてのデットレターメッセージが含まれます。
ApsaraMQ for RocketMQコンソールで、送信できないメッセージを照会、エクスポート、再送信できます。
デッドレターメッセージをクエリするメソッド
次の表に、ApsaraMQ for RocketMQで未送信のメッセージをクエリするために使用できる方法を示します。
移動方法 | 条件 | データ型 | 説明 |
グループIDによる | グループID + 時間範囲 | レンジマッチ | グループIDと時間範囲を指定して、条件を満たすすべてのメッセージをバッチで取得できます。 このクエリメソッドでは、ファジーマッチを使用して多数のメッセージをクエリできます。 |
メッセージID | グループID + メッセージID | 完全一致 | グループIDとメッセージIDを指定して、完全一致を使用してメッセージを検索できます。 |
デッドレターメッセージの照会
ApsaraMQ for RocketMQコンソールにログインします。 左側のナビゲーションウィンドウで、インスタンス数 をクリックします。
上部のナビゲーションバーで、中国 (杭州) などのリージョンを選択します。 [インスタンス] ページで、管理するインスタンスの名前をクリックします。
左側のナビゲーションウィンドウで、デッドレターキュー をクリックします。 デッドレターキュー ページで、次のいずれかの方法を使用してデッドレターメッセージを照会します。
グループから検索
グループIDと、デッドメッセージが生成される時間範囲を指定できます。 次に、条件を満たすすべてのメッセージを照会します。
説明デットレターメッセージの生成時刻は、メッセージに対して指定された再試行の最大数に達した後にメッセージがデットレターキューに送信される時刻を指します。
Message ID から検索
メッセージIDでメッセージを照会する場合、完全一致が使用されます。 グループIDとメッセージIDを指定して、完全一致を使用してクエリするメッセージを検索できます。
デッドレターメッセージのエクスポート
無効メッセージを処理できない場合は、ApsaraMQ for RocketMQコンソールでメッセージをエクスポートして、有効期限が切れた後にメッセージが削除されないようにすることができます。
ApsaraMQ for RocketMQコンソールでは、一度に1つの着信メッセージまたは複数の着信メッセージをエクスポートできます。 エクスポートされたファイルはCSV形式です。
次の表に、書き出された定型文メッセージのフィールドを示します。
項目 | 説明 |
instanceId | ApsaraMQ for RocketMQインスタンスのID。 |
topic | メッセージが属するトピック。 |
msgId | メッセージ ID |
bornHost | メッセージを生成したプロデューサーのURL。 |
bornTimestamp | メッセージがいつ生成されたかを示すタイムスタンプ。 |
storeTimestamp | メッセージがApsaraMQ for RocketMQブローカーに保存されたタイミングを示すタイムスタンプ。 |
reconsumeTimes | 消費の失敗の数。 |
properties | JSON形式のメッセージ属性。 |
body | Base64でエンコードされているメッセージ本文。 |
bodyCRC | メッセージボディCRC (Cyclic Redundancy Check) 。 |
単一のデッドレターメッセージをエクスポートする
ApsaraMQ for RocketMQコンソールで、照会した無効文字メッセージを見つけ、[操作] 列の 詳細 をクリックします。 次に、ドロップダウンリストから メッセージのエクスポート を選択して、無効メッセージをエクスポートします。
一度に複数のデットレターメッセージをエクスポートする
ApsaraMQ for RocketMQコンソールで、グループIDで照会した無効メッセージを選択し、メッセージの一括エクスポート をクリックして無効メッセージをエクスポートします。
死んだ手紙のメッセージを再送する
期待どおりに消費できないメッセージのみが、デットレターキューに転送されます。 デッドレターメッセージには特別な処理が必要です。 問題のトラブルシューティングを行った後、ApsaraMQ for RocketMQコンソールで使用するために無効メッセージを再送信できます。
順序付けられたメッセージがデットレターキューに送信された場合、メッセージを再送信することはできません。 デットレターキューからメッセージをエクスポートし、メッセージを処理する必要があります。
デットレターメッセージが消費のために再送信された後、メッセージは、特定の期間の間、デットレターキューに格納される。 有効期間が経過すると、システムは自動的にメッセージを削除します。
単一のデッドレターメッセージを再送信する
ApsaraMQ for RocketMQコンソールで、照会した無効文字メッセージを見つけ、[操作] 列の 詳細 をクリックします。 次に、ドロップダウンリストから 再送信 を選択して、無効文字メッセージを再送信します。
複数のデッドレターメッセージを一度に再送信する
ApsaraMQ for RocketMQコンソールで、グループIDで照会した未送信メッセージを選択し、メッセージの一括再送信 をクリックして未送信メッセージを再送信します。
関連ドキュメント
メッセージの再試行の動作メカニズムについては、「メッセージの再試行」をご参照ください。