SQS備忘録
SQSとは?
- フルマネージド型のメッセージキューイングサービス
- メッセージ数に応じて自動的にスケールするため、事前計画が不要
- 使用料に対して課金される
- コンシューマーがメッセージを取得しに来るポーリング方式(SNSがプッシュ方式、GCPのpub/subは両方を担っている)
※ メッセージキューイング:システム間で送信するデータを一時的に溜め込む場所を設けて、そこから順次中継していく仕組み
処理の流れ
- ポーリング
- 取得&処理
- 削除
用語
- メッセージ:送信するデータ
- プロデューサー:キューにメッセージを送信するアプリケーションやシステム
- コンシューマー:キューからメッセージを取り出すアプリケーションやシステム
- ポーリング:キューからメッセージを取り出すこと
ユースケース
時間がかかる処理の完了を待たずに次の処理を行いたい
- ユーザが、ECサイトで商品を注文する
- ECサイトのシステムからユーザに「受注通知」を一旦返却する(※注文は仮確定状態)
- ECサイトのシステムから「倉庫システム」に「在庫照会(倉庫、発送日、配達日数等)」を行う(時間がかかる重い処理)
- 「倉庫システム」からECサイトに「在庫確定通知」を送る
- ECサイトからユーザに対して「注文確定通知」を送る
アプリケーション間の連携に使用したい
画像をアップロードすると加工して、S3にアップロードしてくれる構成
- S3に画像をアップロード
- 画像アップロードをトリガーにSQSにメッセージを送信
- lambdaがSQSからメッセージを取得して、画像加工処理を実施(重い処理)
メッセージを送信する箇所のイメージがわかない
- これがかなりわかりやすかったAmazon SQSチュートリアル (AWS CLI で一連の操作をしてみよう) |
- メッセージは文字列で送信するため、テキストでもJSONでも問題ない
# キューの作成 $ aws sqs create-queue --queue-name my-queue # キューの一覧 $ aws sqs list-queues { "QueueUrls": [ "https://sqs.ap-northeast-1.amazonaws.com/xxxxxxx/my-queue" ] } # キューにメッセージを送信 $ aws sqs send-message --queue-url "https://sqs.ap-northeast-1.amazonaws.com/xxxx/my-queue" --message-body "hello world" { "MD5OfMessageBody": "xxx", "MessageId": "xxx" } # キューからメッセージを取り出す $ aws sqs receive-message --queue-url "https://sqs.ap-northeast-1.amazonaws.com/xxx/my-queue" { "Messages": [ { "MessageId": "xxx", "ReceiptHandle": "xxx", "MD5OfBody": "xxx", "Body": "hello world" } ] } # キューからメッセージを削除する $ aws sqs delete-message --queue-url "https://sqs.ap-northeast-1.amazonaws.com/xxxx/my-queue" --receipt-handle "xxx"