翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon SQS ショートポーリングとロングポーリング
Amazon SQS では、キューからメッセージを受信するためのショートポーリングとロングポーリングを提供します。デフォルトでは、キューはショートポーリングを使用します。
とショートポーリングとすると、ReceiveMessage
リクエストは、サーバーのサブセット (加重ランダム分散に基づく) のみを照会し、レスポンスに含めることができるメッセージを検索します。Amazon SQS は、クエリでメッセージが見つからなかった場合でも、すぐにレスポンスを送信します。
とロングポーリングとすると、ReceiveMessage
request は、すべてのサーバーにメッセージを問い合わせます。Amazon SQS は、最小 1 つからリクエストで指定された最大メッセージ数まで、使用可能なメッセージを収集した後、レスポンスを送信します。Amazon SQS は、ポーリングの待機時間が経過した場合にのみ空の応答を送信します。
次のセクションでは、ショートポーリングとロングポーリングの詳細について説明します。
ショートポーリングを使用したメッセージの処理
ショートポーリングを使用してキューからのメッセージを処理する場合、Amazon SQS によりサーバーのサブセットがサンプリングされ (重み付けされたランダム分散に基づいて)、それらのサーバーのメッセージだけが返されます。したがって、ある ReceiveMessage
リクエストによってすべてのメッセージが返されないことがあります。ただし、キューにあるメッセージが 1000 未満の場合、後続のリクエストではメッセージが返されます。キューから処理し続けた場合、Amazon SQS によりすべてのサーバーがサンプリングされ、すべてのメッセージを受信します。
次の図は、システムコンポーネントの 1 つが受信リクエストを生成すると標準キューからメッセージが返されるショートポーリングの動作を示しています。Amazon SQS は複数のサーバー (灰色) をサンプリングし、それらのサーバーからメッセージ A、C、D、および B を返します。メッセージ E はこのリクエストに返されませんが、後続のリクエストには返されます。
ロングポーリングを使用したメッセージの消費
の待機時間が経過するとReceiveMessage
API アクションが 0 より大きい場合ロングポーリングは実行中です。長いポーリングの最大待機時間は 20 秒です。ロングポーリングは、空のレスポンスの数を削減することで、Amazon SQS の使用コストを削減するのに役立ちます (ReceiveMessage
request)と偽の空の応答(メッセージが利用可能であるが応答に含まれていない場合)。Amazon SQS コンソールを使用して新規キューまたは既存のキューのロングポーリングを有効にする方法については、を参照してください。キューパラメータの設定(コンソール)。ベストプラクティスについては、ロングポーリングのセットアップ を参照してください。
ロングポーリングには次の利点があります。
-
レスポンスの送信前にメッセージがキューで使用可能になるまでが待機できるように、空のレスポンス数を削減します。接続がタイムアウトしない限り、
ReceiveMessage
リクエストに対するレスポンスに、使用可能なメッセージが少なくとも 1 つ、最大でReceiveMessage
アクションに指定されたメッセージ数まで含まれます。まれに、キューにまだメッセージが含まれている場合でも、空の応答が受信されることがあります。特に、ReceiveMessageWaitTimeSeconds
パラメータ。 -
Amazon SQS サーバーにサブセットではなく、すべてのクエリを実行して、偽の空のレスポンスを減らします。
-
利用可能になるとすぐにメッセージを返します。
キューが空であることを確認する方法については、を参照してください。キューが空であることを確認する。
ロングポーリングとショートポーリングの違い
ショートポーリングは、WaitTimeSeconds
リクエストの ReceiveMessage
パラメータを次の 2 通りの方法で 0
に設定すると行われます。
-
ReceiveMessage
コールはWaitTimeSeconds
を0
に設定します。 -
ReceiveMessage
コールではWaitTimeSeconds
を設定しませんが、キューの属性ReceiveMessageWaitTimeSeconds
は0
に設定されます。