メニュー
Amazon Simple Queue Service
開発者ガイド

Amazon SQS ロングポーリング

Amazon SQS はデフォルトでショートポーリングを使用して、サーバーのサブセットだけに対して (重み付けされたランダム分散に基づいて) クエリを実行し、レスポンスに含めることができるメッセージがあるかどうかを調べます。

ショートポーリングは、ReceiveMessage コールの WaitTimeSeconds パラメーターを次の 2 通りの方法で 0 に設定すると行われます。

  • ReceiveMessage コールが WaitTimeSeconds0 に設定する。

  • ReceiveMessage コールでは WaitTimeSeconds を設定せず、キューの属性 ReceiveMessageWaitTimeSeconds0 に設定されている。

注記

ReceiveMessageWaitTimeSeconds パラメーターでは、120 の範囲で設定された値が、キュー属性 ReceiveMessageWaitTimeSeconds に設定されたどの値によりも優先されます。

ロングポーリングの利点

ロングポーリングは、空のレスポンスの数 (Amazon SQS キューに送信された ReceiveMessage リクエストに対して返すことができるメッセージがない場合) を削減し、偽の空のレスポンス (メッセージがキューに存在するがレスポンスに含まれない場合) を排除することで、Amazon SQS の使用コストを削減する役に立ちます。

  • ロングポーリングは、レスポンスの送信前にメッセージがキューで使用可能になるまで Amazon SQS が待機できるようにすることで、空のレスポンス数を削減します。接続がタイムアウトしない限り、ReceiveMessage リクエストに対するレスポンスに、使用可能なメッセージが少なくとも 1 つ、最大で ReceiveMessage アクションに指定されたメッセージ数まで含まれます。

  • ロングポーリングは、サーバーすべて (数の制限なく) をクエリすることで、偽の空のレスポンスを排除します。

  • ロングポーリングは、メッセージが使用できるようになるとすぐにメッセージを返します。

AWS マネジメントコンソール を使用したロングポーリングの有効化

[Receive Message Wait Time] を 0 より大きい値に設定することで、AWS マネジメントコンソールを使用してロングポーリングを有効にできます。

AWS マネジメントコンソール を使用して新しいキューでロングポーリングを有効にするには

  1. AWS マネジメントコンソールにサインインし、Amazon SQS コンソール(https://console.aws.amazon.com/sqs/)を開きます。

  2. [Create New Queue] をクリックします。

  3. [Create New Queue] ダイアログボックスで、[Queue Name] を入力します。

  4. [Receive Message Wait Time] に正の整数値 (120 秒) を入力します。

  5. [Create Queue] を選択します。

AWS マネジメントコンソールを使用して既存のキューの [Receive Message Wait Time] 設定を変更できます。

既存のキューに新しい [Receive Message Wait Time] 値を設定するには

  1. キューを選択します。

  2. [Queue Actions] ドロップダウンリストから [Configure Queue] を選択します。

  3. [Receive Message Wait Time] に正の整数値を入力します。

  4. [Save Changes] を選択します。

API を使用したロングポーリングの有効化

以下の表に、使用する API アクションを示します。

使用するアクション 使用アイテム...
ReceiveMessage

WaitTimeSeconds parameter

CreateQueue

ReceiveMessageWaitTimeSeconds 属性

SetQueueAttributes

ReceiveMessageWaitTimeSeconds 属性

重要

複数のキューでロングポーリングを実装する場合、すべてのキューをポーリングする 1 つのスレッドを使用する代わりに、各キューに 1 つのスレッドを使用することをお勧めします。

各キューに対して 1 つのスレッドを使用すると、各キューでメッセージが使用できるようになり次第、アプリケーションで処理できます。複数のキューに単一のスレッドを使用すると、アプリケーションが使用できるメッセージがないキューで待機している間 (最大 20 秒)、別のキューにある使用できるメッセージの処理が妨げられる場合があります。

ロングポーリングを使用するほとんどのユースケースでは、タイムアウト値を最大 20 秒に設定します。20 秒の最大値がアプリケーションに対して適切ではない場合、ロングポーリング用に短いタイムアウトを指定します (最小値は 1 秒)。Amazon SQS へのアクセスに AWS SDK を使用しない場合、または AWS SDK に短いタイムアウトを設定する場合は、長いリクエストを許可するように、またはロングポーリングに短いタイムアウトを使用するように Amazon SQS クライアントを変更しなければならないことがあります。

クエリ API を使用したロングポーリングの有効化

次の例では、WaitTimeSeconds パラメーターを 10 秒に設定して ReceiveMessage アクションをコールすることで、ロングポーリングを有効にします。

AUTHPARAMS の構造は、API リクエストに署名する方法によって異なります。署名バージョン 4 での AUTHPARAMS に関する情報は、アマゾン ウェブ サービス全般のリファレンス署名付き署名バージョン 4 リクエストの例を参照してください。

Copy
http://sqs.us-east-2.amazonaws.com/123456789012/testQueue/ ?Action=ReceiveMessage &WaitTimeSeconds=10 &MaxNumberOfMessages=5 &VisibilityTimeout=15 &AttributeName=All; &Version=2012-11-05 &Expires=2013-10-25T22%3A52%3A43PST &AUTHPARAMS

以下の例は、ロングポーリングを有効にするもう 1 つの方法を示しています。ここでは、SetQueueAttributes アクションの ReceiveMessageWaitTimeSeconds 属性が 20 秒に設定されています。

Copy
http://sqs.us-east-2.amazonaws.com/123456789012/testQueue/ ?Action=SetQueueAttributes &Attribute.Name=ReceiveMessageWaitTimeSeconds &Attribute.Value=20 &Version=2012-11-05 &Expires=2013-10-25T22%3A52%3A43PST &AUTHPARAMS