Amazon SQS 메시지 대기열에 대한 긴 폴링 활성화 - AWS SDK for C++

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

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 멤버 함수를 호출하기 전에 SetQueueAttributesRequestReceiveMessageWaitTimeSeconds를 설정하여 기존 대기열에서도 이를 활성화할 수 있습니다.

포함 파일

#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에서 대기 시간을 초 단위로 설정하여 메시지 수신 시 긴 폴링을 활성화할 수 있습니다.

참고

AWS 클라이언트의 요청 제한 시간이 최대 긴 폴링 시간(20초)보다 길어야만 다음 폴링 이벤트까지 기다리는 동안 ReceiveMessage 요청의 제한 시간이 초과되지 않습니다.

포함 파일

#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; }

전체 예제를 참조하세요.

추가 정보