Amazon SQS可視性タイムアウトとは

コンシューマーがキューからメッセージを受信して処理しても、そのメッセージはキューに保留されたままです。 Amazon SQSでは、メッセージが自動的に削除されません。Amazon SQSは分散システムであり、接続の問題やコンシューマーアプリケーションの問題などが原因で、コンシューマーが実際にメッセージを受信するという保証がありません。 そのため、コンシューマーはメッセージを受信して処理した後、キューからメッセージを削除する必要があります。

メッセージが受信された直後は、メッセージはキューに保留されたままです。 他のコンシューマーが同じメッセージを再び処理しないように、 Amazon SQSは可視性タイムアウトを設定しています。 Amazon SQSは、この時間内では、他のコンシューマーによる同じメッセージの受信と処理が防止されます。 デフォルトの可視性タイムアウトは30秒です。最小は0秒です。最大は12時間です。

可視性タイムアウトの設定

可視性タイムアウトはAmazon SQSがメッセージを返した時点で開始します。タイムアウト時間内に、コンシューマーはメッセージを処理して削除します。ただし、コンシューマーでメッセージを削除する前に障害が発生して、DeleteMessageアクションが呼び出されないまま可視性タイムアウトの期限が切れると、そのメッセージは他のコンシューマーに見えるようになり、再度受信されます。メッセージを一度だけ受信する必要がある場合、コンシューマーは可視性タイムアウトの時間内にメッセージを削除する必要があります。

すべてのAmazon SQSキューの可視性タイムアウトはデフォルトで 30秒に設定されています。この設定はキュー全体で変更できます。通常、可視性タイムアウトは、アプリケーションがキューのメッセージを処理して削除するまでの最大所要時間に設定します。メッセージを受信したら、キュー全体のタイムアウトを変更しなくても、返されるメッセージに特別な可視性タイムアウトを設定することもできます。

メッセージの処理に要する時間がわからない場合は、ハートビートコンシューマプロセスの場合:初期可視性タイムアウト (2 分など) を指定し、コンシューマがメッセージで作業している限り、可視性タイムアウトを1分ごとに2分延長します。

最大可視性タイムアウトは、Amazon SQSがReceiveMessage リクエストメッセージを受信してから12時間です。可視性タイムアウトを延長しても、12時間という最大時間はリセットされません。コンシューマーが12時間以上必要とする場合は、ステップ機能 の使用を検討してください。