翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon SQSショートポーリングとロングポーリング
Amazon SQSは、キューからメッセージを受信するためのショートポーリングオプションとロングポーリングオプションを提供します。次の 2 つのポーリングオプションから選択する場合は、応答性とコスト効率に関するアプリケーションの要件を考慮してください。
-
ショートポーリング (デフォルト) –
ReceiveMessage
リクエストは、サーバーサブセット (加重ランダムディストリビューションに基づく) にクエリを実行して使用可能なメッセージを検索し、メッセージが見つからない場合でも即時応答を送信します。 -
ロングポーリング — すべてのサーバーにメッセージがないか
ReceiveMessage
クエリし、少なくとも 1 つのメッセージが使用可能になると、指定された最大数まで応答を送信します。空のレスポンスは、ポーリング待機時間が経過した場合にのみ送信されます。このオプションを使用すると、空のレスポンスの数が減少し、コストが削減される可能性があります。
次のセクションでは、ショートポーリングとロングポーリングの詳細について説明します。
ショートポーリングを使用したメッセージの処理
ショートポーリングを使用してキュー (FIFO または標準) からのメッセージを使用する場合、Amazon SQS はサーバーのサブセットをサンプリングし (加重ランダムディストリビューションに基づく)、それらのサーバーからのメッセージのみを返します。したがって、ある ReceiveMessage
リクエストによってすべてのメッセージが返されないことがあります。ただし、キューにあるメッセージが1,000未満の場合、後続のリクエストではメッセージが返されます。キューから処理し続けた場合、Amazon SQSによりすべてのサーバーがサンプリングされ、すべてのメッセージを受信します。
次の図は、システムコンポーネントの1 が受信リクエストを生成すると スタンダードキューからメッセージが返されるショートポーリングの動作を示しています。Amazon SQSは、複数のサーバー (灰色) をサンプリングし、それらのサーバーからメッセージ A、C、D、および B を返信します。メッセージ E はこのリクエストに返されませんが、後続のリクエストには返されます。
ロングポーリングを使用したメッセージの使用
待ち時間がいつになるかReceiveMessage
API アクションが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
コールはWaitTimeSeconds
を0
に設定します。 -
ReceiveMessage
コールではWaitTimeSeconds
を設定しませんが、キューの属性ReceiveMessageWaitTimeSeconds
は0
に設定されます。