Amazon Simple Queue Service
開発者ガイド

Amazon SQS ロングポーリング

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

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

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

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

    注記

    ロングポーリングを実行して、ApproximateNumberOfMessagesDelayedApproximateNumberOfMessagesNotVisible、および ApproximateNumberOfMessagesVisible メトリクスが、プロデューサーがメッセージ送信を停止した少なくとも 1 分後 (キューのメタデータが結果整合性に達するとき) に 0 と等しい場合、キューが空であることを確認できます。詳細については、「使用可能な Amazon SQS の CloudWatch メトリクス」を参照してください。

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

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

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

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

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

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

注記

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