Amazon SQS short and long polling - Amazon Simple Queue Service

英語の翻訳が提供されている場合で、内容が矛盾する場合には、英語版がオリジナルとして取り扱われます。翻訳は機械翻訳により提供されています。

Amazon SQS short and long polling

Amazon SQS では、キューからメッセージを受信するためのショートポーリングとロングポーリングを提供します。デフォルトでは、キューはショートポーリングを使用します。

付き short pollingReceiveMessage (重み付きランダム分布に基づいて)サーバーのサブセットのみをクエリして、応答に含めることができるメッセージを検索します。 Amazon SQS は、クエリーでメッセージが見つからない場合でも、応答をすぐに送信します。

付き long pollingReceiveMessage リクエストは、すべてのサーバーに対してメッセージのクエリを実行します。 Amazon SQS は、少なくとも 1 つの利用可能なメッセージを収集した後、リクエストで指定された最大メッセージ数まで応答を送信します。 Amazon SQS は、ポーリングの待機時間が切れた場合にのみ、空の応答を送信します。

次のセクションでは、ショートポーリングとロングポーリングの詳細について説明します。

Consuming messages using short polling

ショートポーリングを使用してキューからのメッセージを処理する場合、Amazon SQS によりサーバーのサブセットがサンプリングされ (重み付けされたランダム分散に基づいて)、それらのサーバーのメッセージだけが返されます。したがって、ある ReceiveMessage リクエストによってすべてのメッセージが返されないことがあります。ただし、キューにあるメッセージが 1000 未満の場合、後続のリクエストではメッセージが返されます。キューから処理し続けた場合、Amazon SQS によりすべてのサーバーがサンプリングされ、すべてのメッセージを受信します。

次の図に、システムコンポーネントの 1 つが受信要求を行った後で標準キューから返されたメッセージのショートポーリング動作を示します。 Amazon SQS は、いくつかのサーバ(灰色)をサンプリングし、これらのサーバからメッセージA、C、D、Bを返します。メッセージ E はこのリクエストに返されませんが、後続のリクエストには返されます。


                    ショート (標準) ポーリングを使用したメッセージのサンプリング

Consuming message using long polling

ReceiveMessage API アクションの待機時間が 0 より大きい場合は、ロングポーリングが有効です。最大ロングポーリングの待ち時間 20 秒です。ロングポーリングは、空のレスポンス(ReceiveMessage リクエストに対して使用できるメッセージがない場合)と、偽の空のレスポンス(メッセージが利用できるがレスポンスに含まれていない場合)の数を削減することで、Amazon SQS の使用コストを削減するために役立ちます。 を使用して新規または既存のキューの長時間ポーリングを有効にする方法については、 Amazon SQS コンソールについては、 Configuring queue parameters (console). ベストプラクティスについては、Setting up long polling を参照してください。

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

  • Eliminate empty responses by allowing Amazon SQS to wait until a message is available in a queue before sending a response. Unless the connection times out, the response to the ReceiveMessage request contains at least one of the available messages, up to the maximum number of messages specified in the ReceiveMessage action.

  • Eliminate false empty responses by querying all—rather than a subset of—Amazon SQS servers.

    注記

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

  • Return messages as soon as they become available.

Differences between long and short polling

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

  • The ReceiveMessage call sets WaitTimeSeconds to 0.

  • The ReceiveMessage call doesn’t set WaitTimeSeconds, but the queue attribute ReceiveMessageWaitTimeSeconds is set to 0.