デッドレターキュー(DLQ)
一定回数処理に失敗したメッセージの移し先となる別のキュー。「毒入り」メッセージがキューを永遠に塞ぐ代わりに、DLQ に退避して調査や手動・自動の対処に回す。
問題は、コンシューマーを必ず落とすメッセージ(不正なデータやバグ)が、キューを塞ぐか延々とループする(リトライストーム)ことだ。X 回失敗した時点でシステムがそのメッセージを「デッドレター化」し、他に影響しない置き場に移す。使い方は、失敗の理由を調べ、バグを直し、メッセージを再投入(redrive)すること。SQS、RabbitMQ、Kafka(独自のパターンで)、Azure Service Bus で標準的に使われる。
ベストプラクティスは、DLQ の深さを監視してアラートを出すこと(DLQ が増えているなら何かが壊れている)と、失敗の理由やメタデータを残すこと。通常のリトライとは違い、DLQ はリトライを使い切った後の終着点である。堅牢なメッセージ駆動システムやマイクロサービスの要となる。