maxReceiveCountとは
- Amazon SQSでメッセージを受信(Receive)しても削除されない場合に、そのメッセージを「処理失敗」と見なすための受信回数の閾値
- メッセージが指定回数以上受信されても正常に処理されなかった場合、SQSはそのメッセージをデッドレターキュー(DLQ)に移動
例
解説
(1)メッセージの投入
- 例えば、メッセージAがSQSキューに送信される
- メッセージAは通常キューに保持され、処理待ちの状態
(2)1回目の受信
- 消費者がメッセージAを受信
- 消費者が処理を試みるが、エラーやタイムアウトで削除しなかった場合:
メッセージAはVisibility Timeout後、再びキューに現れる
(3)2回目の受信
- メッセージAが再び消費者に提供される
- 再び処理を試みるが失敗(削除されない)
- 受信回数が2に達するが、まだデッドレターキューに移動しない
(4)3回目の受信をトリガー
- 3回目にメッセージAが消費者に提供されるタイミングで、maxReceiveCountの設定(2)を超えるため:
メッセージAはデッドレターキューに移動する
その他補足
- Amazon SQSにデッドレターキューを設定しない場合、maxReceiveCountは適用されない
- 推奨値はアプリケーションの性質や処理のリトライ要件によるが、一般的には2~5回程度が設定される
- 「0」は設定できない(エラーになる)
まとめ
- 処理に失敗したメッセージの無限ループを防ぐ
- エラー原因を分離・調査できる仕組みを提供
- システム全体の負荷を軽減し、効率的なリトライ制御を実現
- AWSの分散型システムにおける信頼性を強化