見出し画像

SQSのメッセージ保持期間とDLQ | #AWSメモ


背景

  • DLQありのSQSにおいて、メッセージ保持期間とDLQの関係性を勘違いしていたので、備忘録として残します

結論

  • メッセージ保持期間(MessageRetentionPeriod)を超えたメッセージは、DLQに移動されずに削除される

  • DLQへは、再処理ポリシー(RedrivePolicy)のmaxReceiveCountを超えた場合に移動する

詳細

メッセージ保持期間:MessageRetentionPeriod

  • キューがメッセージを保持する時間

    • メッセージのタイムスタンプをもとに、設定した経過時間を超えたメッセージが削除される

  • DLQにも設定がある

    • DLQに移動した場合のメッセージタイムスタンプは標準キューとFIFOキューで異なるため要注意

      • 標準キュー:DLQ移動後もDLQ移動前のメッセージタイムスタンプとなる

      • FIFOキュー:DLQ移動後はDLQ移動時点のメッセージタイムスタンプとなる

デッドレターキューのメッセージ保持期間(AWS公式ドキュメントより)

maxReceiveCount

  • コンシューマー(メッセージを処理する側:Lambda関数など)がメッセージを受信できる回数

    • maxReceiveCountが1だと、リトライ処理などによる2回目のメッセージ受信はできないまま、DLQに移動する

      • つまり、リトライは実質的に発生しなくなる

    • こちらのRe:Postでは5回以上が推奨されている

      • しかし、アプリの要求仕様や作りによって変わる部分である

      • Lambdaをコンシューマーとしている場合、稀にAWS側の不具合でメッセージ受信に失敗してリトライが発生する場合があるため、考慮が必要

maxReceiveCountの説明(AWS公式ドキュメントより)

参考資料


いいなと思ったら応援しよう!