みなさんこんにちは。
エンタープライズインプリメンテーションチームの山田です。
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をもっと深く掘り下げたネタをご紹介できればと思います。