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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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