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

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

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

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

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

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

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

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

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

次の図は、システムコンポーネントの 1 つが受信リクエストを生成すると標準キューからメッセージが返されるショートポーリングの動作を示しています。Amazon SQS は、複数のサーバー (灰色) をサンプリングし、それらのサーバーからメッセージ A、C、D、および B を返します。メッセージ E はこのリクエストに返されませんが、後続のリクエストには返されます。


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

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

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

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

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

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

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

キューが空であることを確認する方法については、」キューが空であることの確認

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

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

  • -ReceiveMessageコールセットWaitTimeSeconds0

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