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

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

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

Amazon SQSは、キューからメッセージを受信するためのショートポーリングオプションとロングポーリングオプションを提供します。次の 2 つのポーリングオプションから選択する場合は、応答性とコスト効率に関するアプリケーションの要件を考慮してください。

  • ショートポーリング (デフォルト) – ReceiveMessageリクエストは、サーバーサブセット (加重ランダムディストリビューションに基づく) にクエリを実行して使用可能なメッセージを検索し、メッセージが見つからない場合でも即時応答を送信します。

  • ロングポーリング — すべてのサーバーにメッセージがないかReceiveMessageクエリし、少なくとも 1 つのメッセージが使用可能になると、指定された最大数まで応答を送信します。空のレスポンスは、ポーリング待機時間が経過した場合にのみ送信されます。このオプションを使用すると、空のレスポンスの数が減少し、コストが削減される可能性があります。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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