AWS SAAの試験問題を解いていたらSQSの可視性タイムアウトという言葉が見つかって、初めて聞く言葉だったのでいろいろ調べました。
AWSのドキュメントはこちらです。
コンシューマーがキューからメッセージを受信して処理しても、そのメッセージはキューに残ったままです。Amazon SQS では、メッセージが自動的に削除されません。Amazon SQS は分散システムであり、接続の問題やコンシューマーアプリケーションの問題などが原因で、コンシューマーが実際にメッセージを受信するという保証がないためです。そのため、コンシューマーはメッセージを受信して処理した後、キューからメッセージを削除する必要があります。
うーん、まだ手を動かして検証できていないので文面の説明だけでは理解が難しいですが、キューにずっとメッセージが溜まっていくのを避けるための仕組み、みたいな理解でとりあえず進めてみます。
可視性タイムアウトについては以下の説明がありました。
メッセージが受信された直後は、メッセージはキューに残ったままです。他のコンシューマーが同じメッセージを再処理しないように、Amazon SQS は可視性タイムアウトを設定しています。
可視性タイムアウトはSQS のキューに入ったメッセージが処理開始直後に重複して処理されないように、処理中の間は他のプロセスからは、メッセージが見えないようにする設定のようです。
あとコンシューマーという概念がいまいち理解できなかったので調べました。
こちらのドキュメントによると、コンシューマー = キューからメッセージを受信するコンポーネントとのことです。
あと試験問題に出そうなタイムアウトのデフォルト値と最大値などは以下です。
メッセージのデフォルトの可視性タイムアウトは 30 秒です。最小値は 0 秒、最大スケールは 12 時間です。
SQSはまだまだわからにことだらけなので少しずつ手を動かしつつ座学も進めていきます。