2011年10月21日金曜日

SQSってなんじゃ?(遅延送信、一括送信機能が追加)


SQSに新機能が登場しました。今回追加されたのは、大きく分けて

  • メッセージの一括送信、削除
  • キューとメッセージの遅延送信

の2つです。

さっそく試してみましょう


キューとメッセージの遅延送信

遅延送信機能はコンソールから確認できるので、コンソールを見てみます。
まずはキューの遅延送信設定を確認してみます。
コンソールのSQSから「Create New Queue」ボタンでキューを作成します。

すると、下記のキュー設定ダイアログが表示されます。
赤枠の部分に「Delivery Delay」があり、ここで最大15分まで遅延時間を設定できます。
たとえばここで遅延時間を45秒に設定すると、このキューで送信したメッセージはデフォルトで送信後45秒後から受信可能になります。



次に、そのキューで「SendMessage」してみると、メッセージ送信ダイアログが表示されます。
赤枠のとおり、メッセージでも個別に遅延時間を設定できます。
デフォルトでは、キューで設定した遅延時間がセットされています。なにもせずに送信すると、キューの遅延設定時間で遅延し、ここで別の時間にセットすると、その時間だけ遅延します。

ここでは3分に設定して、メッセージ送信してみます。




ここで、「Queue Action」から「View/Delete Messages」を選び、キューのメッセージ一覧ダイアログが表示され、「Start Polling Messages」を数回押してみますが、しばらくは(3分以内)メッセージが受信されません。




3分経過すると、先程のメッセージが受信されます。メッセージ情報のSentとFirst Receivedの間が3分以上あいているのが確認できます。




また、メッセージダイアログで何も設定せずに送信すると、キューで設定した45秒間は受信できず、45秒経過後に受信されるようになります。



このようなメッセージの遅延は、仕様やアプリケーションの他の処理との兼ね合いなどで必要になるシーンがあるので、バッチなどのバックエンド処理には重宝しそうです。



メッセージの一括送信、削除



APIにSendMessageBatchDeleteMessageBatchという関数が用意されました。メッセージの送信、削除を同時に10メッセージまで操作できるようです。ただし、通常のSendMessageなどは1つのメッセージ容量が65KBまででしたが、この一括送信では10個で65KBまでという制限があるようです。
この機能の利点は、10個までのメッセージの操作を1リクエストで行えるため、リクエストごとの課金を抑えることができます。


現時点(2011/10/21 18:00)では、メッセージの一括送信、削除の機能は、APIまでの対応でSDKではまだ未サポートのようです。

SQSのAPIリファレンス
http://docs.amazonwebservices.com/AWSSimpleQueueService/latest/APIReference/

こちらはSDKがサポートされたらまた報告したいと思います。


以上です。