すべての DLQ メッセージを確実に処理する

送達不能キュー・ハンドラーは、表示されているが、除去されなかった DLQ のすべてのメッセージのレコードを保持しています。 DLQ に含まれているメッセージの数ができるだけ少ないことを確認してください。

本タスクについて

フィルターとして DLQ ハンドラーを使用して、DLQ からメッセージの小サブセットを抽出する場合、DLQ ハンドラーは、処理しなかった DLQ 内のメッセージのレコードを引き続き保持します。 また、DLQ が先入れ先出し (FIFO) として定義されても、DLQ に到着する新規メッセージが参照されることを DLQ ハンドラーは保証できません。 キューが空ではないとき、DLQ は定期的に再スキャンされて、すべてのメッセージが検査されます。

これらの理由により、DLQ に含まれるメッセージの数をできるだけ少なくする必要があります。 理由は何であれ、廃棄されない、または他のキューに転送されないメッセージがキューに累積されるのを許容すると、DLQ ハンドラーのワークロードが増えて、DLQ 自体が満杯になる危険があります。

DLQ ハンドラーが DLQ を空にできるようにするには、以下の処置を行います。

手順

  • 無視するメッセージについては、メッセージを別のキューに移動するアクションを使用してください。

    DLQ にメッセージを残す ACTION (IGNORE) コマンドを使用しないようにしてください。また、テーブル内の他の規則によって明示的にアドレス指定されていないメッセージについては、 ACTION (IGNORE) が想定されることに注意してください。 代わりに、メッセージを別のキューに移動するアクションを使用してください。 以下に例を示します。

    ACTION (FWD) FWDQ (IGNORED.DEAD.QUEUE) HEADER (YES)
    
  • テーブル内の最終規則を catch-all にして、テーブル内の前の規則によってアドレス指定されていないメッセージを処理します。

    例えば、テーブルの中の最後のルールは、次のような形にすることができます。

    ACTION (FWD) FWDQ (REALLY.DEAD.QUEUE) HEADER (YES)
    

    これにより、表の最終ルールに該当するメッセージがキュー REALLY.DEAD.QUEUE に転送され、そこで手動で処理できます。 このような規則がないと、メッセージはいつまでも DLQ に残ることになります。