SQSの Receive Message Wait Time について

記事タイトルとURLをコピーする


 

SQS_image


みなさんこんにちは。
エンタープライズインプリメンテーションチームの山田です。

SQSには、 Receive Message Wait Time ( メッセージの受信を指定した時間待機する ) という、いわゆるロングポーリングを設定するためのパラメータが存在します。

SQSはリクエスト数に応じて課金されるため、ロングポーリングを利用することでメッセージの受信リクエスト回数を減らす = コストの抑制に繋がります。
今回は、その Receive Message Wait Time パラメータについてちょっとした小ネタをご紹介したいと思います

Receive Message Wait Time を指定する方法

Receive Message Wait Time は、マネジメントコンソールから指定出来ますし、AWS SDK の ReceiveMessage関数、もしくは poll関数などのメッセージを受信するための関数(以下、メッセージ取得関数)を呼び出す際にも指定できます。

マネジメントコンソールからの設定方法は、AWSの公式ブログで公開されているのでそちらをご確認ください。

参考 :  【AWS発表】Amazon SQSに新機能が追加! ロングポーリング、リクエストバッチ処理/クライアントサイドでのバッファリング


メッセージ取得関数では下記の通り、wait_time_seconds パラメータで指定します。
秒単位で指定するので、この例だと 20秒の間メッセージを待機することになります。

 

sqs = AWS::SQS.new.client


 sqs.receive_message(
 wait_time_seconds: 20,
 queue_url: https://sqs.ap-northeast-1.amazonaws.com/xxxxxxxxxxxx/hoge
 )

 

どちらの値が優先されるのか?

さて、ここからが本題です。
マネジメントコンソールで Receive Message Wait Time を指定した場合と、メッセージ取得関数実行時に指定した場合にどちらが優先されるでしょう。

答えは メッセージ取得関数 の引数で受け渡すパラメータです。

マネジメントコンソール側で Receive Message Wait Time を10秒、メッセージ取得関数のパラメータで 20秒と指定した場合はメッセージ取得関数のパラメータが優先され、20秒間ロングポーリングでメッセージを待機します。

マネジメントコンソール側で設定する値がデフォルト値、メッセージ取得関数実行毎にメッセージの待機時間を調整したい場合は、都度パラメータを指定する様なイメージですかね。

まとめ

というわけで、SQSの Receive Message Wait Time についてご紹介しました!
次回はSQSをもっと深く掘り下げたネタをご紹介できればと思います。