Amazon SQS ショートポーリングとロングポーリング - Amazon Simple Queue Service

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

Amazon SQS ショートポーリングとロングポーリング

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

ショートポーリングでは、ReceiveMessage リクエストはサーバーのサブセット (加重ランダム分散に基づく) のみを照会し、レスポンスに含めることができるメッセージを検索します。Amazon SQS は、クエリにメッセージが見つからなかった場合でも、リクエストをすぐに送信します。

ロングポーリングでは、ReceiveMessage リクエストはすべてのサーバーにメッセージをクエリします。Amazon SQS は、最小 1 つからリクエストで指定された最大メッセージ数まで、使用可能なメッセージを収集した後、レスポンスを送信します。Amazon SQS は、ポーリング待機時間が経過した場合にのみ空のレスポンスを送信します。

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

ショートポーリングを使用したメッセージの処理

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

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


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

長いポーリングを使用したメッセージの消費

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

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

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

  • すべてを照会することで、誤った空の応答を減らします—一部ではなく—Amazon SQS サーバー。

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

キューが空であることを確認する方法については、以下を参照してください。 キューが空であることの確認.

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

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

  • ReceiveMessage 通話セット WaitTimeSeconds0.

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