翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon SQS メッセージキューでロングポーリングを有効にする
Amazon SQS はデフォルトでショートポーリングを使用して、サーバーのサブセットだけに対して (重み付けされたランダム分散に基づいて) クエリを実行し、レスポンスに含めることができるメッセージがあるかどうかを調べます。
ロングポーリングは、Amazon SQS キューに送信された ReceiveMessage リクエストに応答して返信するメッセージがない場合に、偽の空のレスポンスを排除して空のレスポンスの数を減らすことで、Amazon SQS の使用コストを削減します。1~20 秒でロングポーリング頻度を設定できます。
前提条件
作業を始める前に「AWS SDK for C++ の開始方法」を読むことをお勧めします。
コード例をダウンロードし、「コード例の開始方法」の説明に従ってソリューションをビルドします。
例を実行するには、リクエストに使用するユーザープロファイルに、AWS のサービスとアクションに対する適切なアクセス許可が付与されている必要があります。詳細については、「AWS 認証情報の提供」を参照してください。
キューの作成時にロングポーリングを有効にする
Amazon SQS キューの作成時にロングポーリングを有効にするには、SQSClient クラスの CreateQueue メンバー関数を呼び出す前に、CreateQueueRequest オブジェクトの ReceiveMessageWaitTimeSeconds 属性を設定します。
含まれるもの:
#include <aws/core/Aws.h> #include <aws/sqs/SQSClient.h> #include <aws/sqs/model/CreateQueueRequest.h> #include <iostream>
コード
Aws::SQS::SQSClient sqsClient(clientConfiguration); Aws::SQS::Model::CreateQueueRequest request; request.SetQueueName(queueName); request.AddAttributes( Aws::SQS::Model::QueueAttributeName::ReceiveMessageWaitTimeSeconds, pollTimeSeconds); const Aws::SQS::Model::CreateQueueOutcome outcome = sqsClient.CreateQueue(request); if (outcome.IsSuccess()) { std::cout << "Successfully created queue " << queueName << std::endl; } else { std::cout << "Error creating queue " << queueName << ": " << outcome.GetError().GetMessage() << std::endl; }
完全な例
既存のキューでロングポーリングを有効にする
キュー作成時にロングポーリングを有効にすることに加えて、SQSClient クラスの SetQueueAttributes メンバー関数を呼び出す前に SetQueueAttributesRequest で ReceiveMessageWaitTimeSeconds を設定することで、既存のキューでも有効にすることができます。
含まれるもの:
#include <aws/core/Aws.h> #include <aws/sqs/SQSClient.h> #include <aws/sqs/model/SetQueueAttributesRequest.h> #include <iostream>
コード
Aws::SQS::SQSClient sqsClient(clientConfiguration); Aws::SQS::Model::SetQueueAttributesRequest request; request.SetQueueUrl(queueURL); request.AddAttributes( Aws::SQS::Model::QueueAttributeName::ReceiveMessageWaitTimeSeconds, pollTimeSeconds); const Aws::SQS::Model::SetQueueAttributesOutcome outcome = sqsClient.SetQueueAttributes( request); if (outcome.IsSuccess()) { std::cout << "Successfully updated long polling time for queue " << queueURL << " to " << pollTimeSeconds << std::endl; } else { std::cout << "Error updating long polling time for queue " << queueURL << ": " << outcome.GetError().GetMessage() << std::endl; }
完全な例
メッセージ受信時のロングポーリングを有効化する
メッセージの受信時にロングポーリングを有効にするには、SQSClient クラスの ReceiveMessage メンバー関数に渡す ReceiveMessageRequest で待機時間 (秒単位) を設定します。
注記
次のポーリングイベントの待機中に ReceiveMessage リクエストがタイムアウトしないように、AWS クライアントのリクエストのタイムアウトがロングポーリングの最大値 (20 秒) より長いことを確認します。
含まれるもの:
#include <aws/core/Aws.h> #include <aws/sqs/SQSClient.h> #include <aws/sqs/model/ReceiveMessageRequest.h>
コード
Aws::SQS::SQSClient sqsClient(customConfiguration); Aws::SQS::Model::ReceiveMessageRequest request; request.SetQueueUrl(queueUrl); request.SetMaxNumberOfMessages(1); request.SetWaitTimeSeconds(waitTimeSeconds); auto outcome = sqsClient.ReceiveMessage(request); if (outcome.IsSuccess()) { const auto &messages = outcome.GetResult().GetMessages(); if (messages.empty()) { std::cout << "No messages received from queue " << queueUrl << std::endl; } else { const auto &message = messages[0]; std::cout << "Received message:" << std::endl; std::cout << " MessageId: " << message.GetMessageId() << std::endl; std::cout << " ReceiptHandle: " << message.GetReceiptHandle() << std::endl; std::cout << " Body: " << message.GetBody() << std::endl << std::endl; } } else { std::cout << "Error receiving message from queue " << queueUrl << ": " << outcome.GetError().GetMessage() << std::endl; }
完全な例
詳細
-
「Amazon Simple Queue Service デベロッパーガイド」の「Amazon SQS ロングポーリング」
-
「Amazon Simple Queue Service API リファレンス」の「CreateQueue」
-
「Amazon Simple Queue Service API リファレンス」の「ReceiveMessage」
-
「Amazon Simple Queue Service API リファレンス」の「SetQueueAttributes 」