概要
Amazon SQSは完全マネージド型のメッセージキューイングサービスです。キューによるメッセージ配信によって分散されたソフトウェアシステムとコンポーネントを統合および分離することが可能となります。キューとは入力されたデータやメッセージを入ってきた順に一列に並べ、先に入れた要素から順に取り出すという規則で受信することができるメッセージ配信の仕組みです。「先に並んでいた人が先にレジに呼ばれて、後から来た人は、列の後ろに並ぶ」というレジ待ちのようなイメージ。
メッセージキューとは
アプリケーション間でデータ交換する方式の一つ。送信側をプロデューサー
、受信する側をコンシューマー
と呼び、 Queue の領域でデータをする。この方式を取ることで、互いのアプリケーションは Queue のみ意識すればよく、アプリケーション同士を疎結合
に保つことができる。
キューの種類
標準キュー
FIFOキュー
優先度つきキュー
Amazon SQSではキューに対して優先度を設定することができます。それによって、優先的に処理されるキューとそうではないキューとに振り分けることが可能。
デッドレターキュー
なんらかの原因で正常に処理することができなかったメッセージがキュー内に残り続けることを防ぐために、分離先として別のキュー(デッドレターキュー
)にメッセージを移動する。そうすることで後続処理に影響を与えることを防ぐ。デッドレターキューに移動されたメッセージを解析することで、正常に処理されなかった原因をあとから解析することも可能。また、デッドレターキューにメッセージが移動したタイミングでアラームを発行し、検知することもできる。
可視性タイムアウト
コンシューマーが取得したメッセージに対して、指定した期間の秒数(デフォルト30秒、最大12時間)他のコンシューマーからの同一メッセージへのアクセスをブロックする。複数のコンシューマーによる同一メッセージへの処理を防ぎたい場合に利用する。指定した時間を超えると、他のコンシューマーからもメッセージにアクセスすることが可能になる。そのため、重複処理を防ぎたいのであれば可視性タイムアウトで指定した時間内にメッセージを削除する必要がある。
ただし、標準キューに可視性タイムアウトを設定しても、メッセージを2回受信しない保証にはならない
遅延キューとメッセージタイマー
プロデューサーがメッセージをキューに送信してから一定時間経過後にメッセージへアクセスすることができる機能。利用用途としては、メッセージの処理を一定期間遅延させて実施したい場合や、リトライ処理を一定時間後に利用したい場合など。0秒~15分の間で設定可能。
遅延キューはキュー全体への設定、メッセージタイマーは特定のメッセージに対して遅延時間を設定する。
可視性タイムアウトと違い、キューが発行された直後 から見えなくなる。また キュー全体 に効果がある。
ユースケース
「保留中のデータベースへの書き込みリクエスト」を、Amazon SQSキューに格納して非同期に処理することで、書き込みリクエストが途中で失われないようにする