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

Amazon SQS ロングポーリング

ロングポーリングは、空のレスポンス (ReceiveMessage リクエストに対して使用できるメッセージがない場合) と、偽の空のレスポンス (メッセージが利用できるがキューに含まれていない場合) の数を削減することで、Amazon SQS の使用コストを削減するために役立ちます。 AWS マネジメントコンソール または AWS SDK for Java (および CreateQueueSetQueueAttributesReceiveMessage アクション) を使用して、新しいキューまたは既存キューのロングポーリングを有効にする方法については、Configuring Long Polling for an Amazon SQS queue チュートリアルを参照してください。ベストプラクティスについては、ロングポーリングのセットアップ を参照してください。

ロングポーリングには次の利点があります。

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

  • サブセットではなく、すべての Amazon SQS サーバーにクエリを実行して、偽の空のレスポンスを排除します。

  • 利用可能になるとすぐにメッセージを返します。

ロングポーリングとショートポーリングの違い

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

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

  • ReceiveMessageコールは WaitTimeSeconds0 に設定します。

  • ReceiveMessage コールでは WaitTimeSeconds を設定しませんが、キューの属性 ReceiveMessageWaitTimeSeconds0 に設定されます。

注記

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