【でっどれたーきゅー】

デッドレターキュー とは?

💡 配達不能メッセージの「待合室」
📌 このページのポイント
Dead Letter Queue(DLQ) Producer 送信 Queue Consumer 正常処理 リトライ失敗 Dead Letter Queue 処理できなかったメッセージ DLQに溜まったメッセージは後から調査・再処理できる
Dead Letter Queue のイメージ
ひよこ ひよこ

なぜDLQが必要なの?

ペンギン先生 ペンギン先生

メッセージの処理が何度リトライしても失敗する「ポイズンメッセージ」があると、キューが詰まって後続のメッセージも処理できなくなる。DLQに退避させることで、メインキューの流れを止めずに済むんだ。「壊れた手紙は別の箱に入れて、正常な手紙の配達を続ける」イメージだよ

ひよこ ひよこ

DLQに入ったメッセージはどうする?

ペンギン先生 ペンギン先生

アラート通知(DLQにメッセージが入ったらSlack通知等)、②原因調査(メッセージの中身とエラーログを確認)、③修正後に再処理(DLQからメインキューに戻す)、④再処理不要なら削除。DLQの監視を忘れると、気づかないうちに大量のメッセージが溜まって後から大変なことになるよ

ひよこ ひよこ

リトライ回数は何回が適切?

ペンギン先生 ペンギン先生

一般的には3〜5回が目安だよ。1回目は即時、2回目は1秒後、3回目は5秒後のように指数バックオフでリトライして、全部失敗したらDLQに送る。回数が少なすぎると一過性のエラーを拾えない、多すぎるとDLQへの到達が遅れて問題の検知が遅くなる。サービスの特性に合わせて調整しようね

ひよこ ひよこ

DLQのDLQ(ネスト)はありえる?

ペンギン先生 ペンギン先生

技術的には可能だけど通常はやらないよ。DLQは「最後の砦」であるべきで、DLQのメッセージ処理が失敗するならそれは運用レベルで対応すべき問題。DLQのメッセージには有効期限(TTL)を設定して、一定期間後に削除するか、長期保存が必要ならS3等にアーカイブするのが実践的だね

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「デッドレターキュー」って出てきたら「処理失敗メッセージの退避先キュー」と思えればだいたいOK!
📖 おまけ:英語の意味
「Dead Letter Queue (DLQ)」 = 配達不能メッセージキュー
💬 Dead Letter(届けられない手紙)を集める場所。郵便の配達不能郵便物の概念から来ているよ
← 用語集にもどる