Amazon SQS
メッセージキューサービス
分散システムなどで利用される
コンポーネントの結合を抑える
SQSにキューが溜まるので、利用したい方はそれを利用する形
SQSを置くことで、システム同士が直接やりとりする必要がなくなる
スタンダードキュー
少なくとも1回は必ず配信される
重複して配信されることもありえる
利用側で考慮が必要
順序性は担保しない。時々送信した順序と違う順序で実行される時がある
FIFOキュー
FIFOキューの名前は.fifoのサフィックスで終わる必要がある
1回だけの処理
可視性タイムアウト
コンシューマがメッセージを受信した場合に、他のコンシューマーからの同一メッセージへのアクセスをブロックする秒数
メッセージは自動では削除されないため、受信しているだけでは、キューにメッセージは残っている
そのためのブロックの仕組み
何らかの理由によりメッセージの削除がされなかった場合、可視性タイムアウトの時間が過ぎれば、他のコンシューマからメッセージが使えるようになる
デフォルトの可視性タイムアウトは30秒。最小は0秒。最大は12時間。
配信遅延
メッセージ受信待機時間
メッセージ保持期間
メッセージを保持しておく期間
利用されなかったり、削除されなかったりして、残っているメッセージを削除する
デットレターキューに移動されても、キューのタイムスタンプは変わらない
そのため、デットレターキューの保持期間は、メッセージ保持期間より大きい期間を指定する
最大メッセージサイズ
SQS Lambdaトリガー
メッセージを受信した際に、指定したLambdaを起動する
eventオブジェクトに、SQSのメッセージなどが入っている
Lambda側のコードでは特にSQSからメッセージを取得するということはしなくて良い
Lambdaの処理が成功した場合には、キューは自動的に削除される
失敗した場合は、キューは削除されない
自動で再試行される
バックオフ戦略?
失敗し続けると、そのうち削除される???要調査