![見出し画像](https://assets.st-note.com/production/uploads/images/172797979/rectangle_large_type_2_63ac5d354c2d384d21082dca802dd05e.png?width=1200)
SQSのメッセージ保持期間とDLQ | #AWSメモ
背景
DLQありのSQSにおいて、メッセージ保持期間とDLQの関係性を勘違いしていたので、備忘録として残します
結論
メッセージ保持期間(MessageRetentionPeriod)を超えたメッセージは、DLQに移動されずに削除される
DLQへは、再処理ポリシー(RedrivePolicy)のmaxReceiveCountを超えた場合に移動する
詳細
メッセージ保持期間:MessageRetentionPeriod
キューがメッセージを保持する時間
メッセージのタイムスタンプをもとに、設定した経過時間を超えたメッセージが削除される
DLQにも設定がある
DLQに移動した場合のメッセージタイムスタンプは標準キューとFIFOキューで異なるため要注意
標準キュー:DLQ移動後もDLQ移動前のメッセージタイムスタンプとなる
FIFOキュー:DLQ移動後はDLQ移動時点のメッセージタイムスタンプとなる
![](https://assets.st-note.com/img/1738494367-WtwVdSr64UgoIT9eMsizp7AX.png?width=1200)
maxReceiveCount
コンシューマー(メッセージを処理する側:Lambda関数など)がメッセージを受信できる回数
maxReceiveCountが1だと、リトライ処理などによる2回目のメッセージ受信はできないまま、DLQに移動する
つまり、リトライは実質的に発生しなくなる
こちらのRe:Postでは5回以上が推奨されている
しかし、アプリの要求仕様や作りによって変わる部分である
Lambdaをコンシューマーとしている場合、稀にAWS側の不具合でメッセージ受信に失敗してリトライが発生する場合があるため、考慮が必要
![](https://assets.st-note.com/img/1738495260-sDPHI3pbWORmc7gXFV062fuv.png?width=1200)