ApsaraMQ for RocketMQのメッセージの消費に失敗した場合、メッセージの再試行がトリガーされます。 指定された最大再試行回数に達してもメッセージの消費に失敗した場合、メッセージは無効文字メッセージになります。 ApsaraMQ for RocketMQを使用すると、トピックを指定して、その後のビジネス復旧またはトラブルシューティングのために無効メッセージを保存できます。 このトピックでは、一般的なシナリオ、ポリシー、制限、設定方法、およびデットレターメッセージの使用方法について説明します。
一般的なシナリオ
デッドレターメッセージが正しく処理されるシナリオ
メッセージの再試行に失敗した後、メッセージを無効文字トピックに保存し、メッセージを消費する消費者グループを作成できます。 これは問題のトラブルシューティングに役立ちます。
デッドレターメッセージが誤って処理されるシナリオ
複数のシステムでデットレターメッセージが転送された後、元のトピックにダンプされた場合、メッセージはループで再試行されます。 これにより、メッセージの雪崩が発生する可能性があります。
デッドレターポリシー
メッセージはどのような条件でデッドレターメッセージになりますか?
再試行の最大数に達した後にメッセージが消費されない場合、メッセージは無効メッセージになります。
デッドレターメッセージを保存するためのルール
デフォルトでは、ApsaraMQ for RocketMQは無効メッセージを保存しません。 メッセージがデットレターメッセージになった後、メッセージは破棄される。
ApsaraMQ for RocketMQコンソールで、無効メッセージの保存機能を有効にできます。 この機能を有効にすると、デットレターメッセージが特定のトピックに保存されます。 このトピックは、デッドレタートピックと呼ばれます。 詳細については、「無効メッセージ保存機能の有効化」をご参照ください。
メッセージが定型文トピックに保存された後、次のルールが適用されます。
メッセージに対して新しいメッセージIDが生成される。
カスタム属性やメッセージ本文などのカスタム設定は変更されません。
デットレターメッセージの保存期間は、メッセージがデットレタートピックに保存された時点から始まります。 たとえば、メッセージは13時00時00時00分にブローカーに配信され、2時間後の15:00:00にデットレターのトピックにデットレターのメッセージとして送信されます。 デットレターメッセージの保存期間は、15…………
制限事項
通常のメッセージタイプまたは順序付きメッセージタイプのトピックのみを無効文字トピックとして指定できます。
デッドレターメッセージが生成されたトピックをデッドレタートピックとして使用することはできません。 そうでなければ、メッセージなだれが発生する可能性があります。 システムが、無効文字トピックが元のトピックと同じであることを検出した場合、メッセージは破棄されます。
異なるトピックのデッドレターメッセージを同じデッドレタートピックに保存できます。
無効文字トピックが属するコンシューマーグループを削除しても、無効文字トピックは削除されません。
削除するトピックが無効文字ポリシーに関連付けられている場合は、トピックを削除する前に、ポリシーからトピックの関連付けを解除する必要があります。
デッドレターメッセージ保存機能を有効にする
ApsaraMQ for RocketMQコンソールで無効メッセージを保存するかどうかを指定できます。
操作:
インスタンス数 ページで、管理するインスタンスの名前をクリックします。
左側のナビゲーションウィンドウで、グループ をクリックします。 グループ ページで、グループの作成 をクリックします。
デッドレターのメッセージ指標
説明
データ型 | メトリック |
rocketmq_send_to_dlq_messages: 1分あたりの新しい無効文字メッセージの数。 | |
|
メトリクスの使用方法
ApsaraMQ for RocketMQを使用すると、デットレターメッセージのアラートルールを設定できます。 これにより、できるだけ早い機会に例外を検出し、ダッシュボードに表示されるメトリックデータに基づいて問題をトラブルシューティングできます。
シナリオ1: 1分あたりの新しい着信メッセージの数を確認する
ダッシュボードでrocketmq_send_to_dlq_messagesメトリックを表示できます。 SendDLQMessageCountPerGidメトリックをCloudMonitorのモニタリング項目として追加することもできます。
シナリオ2: 未処理の無効メッセージの数を確認する
ダッシュボードで、指定した無効文字トピックの消費者ラグ指標を表示できます。 ConsumerLagPerGidTopicメトリックをCloudMonitorのモニタリング項目として追加することもできます。
使用上の注意
消費者は元のトピックに関する情報をどのように取得しますか?
解決策1: 定型文トピックを設定するときに、定型文トピックの名前を元のトピックの名前にマッピングします。
たとえば、元のトピックにtestTopicという名前が付けられている場合は、無効文字トピックにDLQ-testTopicという名前を付けます。
解決策2: 元のトピックに関する情報をメッセージのカスタム属性に含めます。 サンプルコード:
messageBuilder.addProperty("originalTopic","testTopic")
デッドレターメッセージを別々に処理する
デッドレターメッセージは、通常のビジネスワークフローで再試行が実行された後もまだ消費されないメッセージです。 業務の中断を防ぐには、着信メッセージを個別に処理する必要があります。
メッセージの元のトピックを無効文字トピックとして使用しないでください。 それ以外の場合、デットレターメッセージは元のトピックにダンプされ、ループで再試行されます。 これにより、メッセージの雪崩が発生する可能性があります。
他のメッセージを消費する消費者グループを使用して、無効メッセージを消費しないでください。