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 の使用コストを削減するために役立ちます。 AWS マネジメントコンソール または AWS SDK for Java (および CreateQueueSetQueueAttributesReceiveMessage の各アクション) を使用して、新しいキューまたは既存キューのロングポーリングを有効にする方法については、チュートリアル: Amazon SQS キューにロングポーリングを設定する チュートリアルを参照してください。ベストプラクティスについては、ロングポーリングのセットアップ を参照してください。

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

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

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

    注記

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

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

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

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

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

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