기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon SQS에서 DLQ(Dead Letter Queue) 사용
Amazon SQS는 Dead Letter Queue(DLQ)를 지원합니다. Dead Letter Queue(DLQ)는 성공적으로 처리할 수 없는 메시지에 대해 다른 대기열이 대상으로 지정할 수 있는 대기열입니다. 배달 못한 편지 대기열에서 이 메시지를 구분하고 격리하여 처리에 실패한 이유를 확인할 수 있습니다.
Dead Letter Queue(DLQ)를 생성하려면 먼저 리드라이브 정책을 생성한 후 대기열의 속성에 해당 정책을 설정해야 합니다.
중요
Dead Letter Queue(DLQ)는 소스 대기열과 동일한 유형의 대기열(FIFO 또는 표준)이어야 합니다. 또한 소스 대기열과 동일한 AWS 계정 및 AWS 리전을 사용하여 생성해야 합니다.
사전 조건
시작하기 전에 AWS SDK for C++ 사용 시작하기를 읽어보시기 바랍니다.
예제 코드를 다운로드하고 코드 예제 시작하기에 설명된 대로 솔루션을 빌드합니다.
예제를 실행하려면 코드가 요청을 수행하는 데 사용하는 사용자 프로필이 AWS에서 적절한 권한(서비스 및 동작에 대한)을 보유하고 있어야 합니다. 자세한 내용은 AWS 자격 증명 제공을 참조하세요.
리드라이브 정책 생성
리드라이브 정책은 JSON으로 지정됩니다. 이 정책을 생성하려면 AWS SDK for C++와 함께 제공된 JSON 유틸리티 클래스를 사용할 수 있습니다.
다음은 Dead Letter Queue(DLQ)의 ARN과 메시지가 DLQ로 전송되기 전에 수신되었으나 처리되지 않은 최대 횟수를 제공하여 리드라이브 정책을 생성하는 예시 함수입니다.
포함 파일
#include <aws/core/Aws.h> #include <aws/core/utils/json/JsonSerializer.h>
코드
Aws::String MakeRedrivePolicy(const Aws::String &queueArn, int maxReceiveCount) { Aws::Utils::Json::JsonValue redrive_arn_entry; redrive_arn_entry.AsString(queueArn); Aws::Utils::Json::JsonValue max_msg_entry; max_msg_entry.AsInteger(maxReceiveCount); Aws::Utils::Json::JsonValue policy_map; policy_map.WithObject("deadLetterTargetArn", redrive_arn_entry); policy_map.WithObject("maxReceiveCount", max_msg_entry); return policy_map.View().WriteReadable(); }
전체 예제
소스 대기열에서 리드라이브 정책 설정
Dead Letter Queue(DLQ) 설정을 완료하려면 SQSClient 클래스의 SetQueueAttributes 멤버 함수를 호출합니다. 이때 JSON 재전송 정책으로 RedrivePolicy 속성을 설정한 SetQueueAttributesRequest 객체를 함께 사용합니다.
포함 파일
#include <aws/sqs/SQSClient.h> #include <aws/sqs/model/SetQueueAttributesRequest.h> #include <iostream>
코드
Aws::SQS::Model::SetQueueAttributesRequest request; request.SetQueueUrl(srcQueueUrl); request.AddAttributes( Aws::SQS::Model::QueueAttributeName::RedrivePolicy, redrivePolicy); const Aws::SQS::Model::SetQueueAttributesOutcome outcome = sqsClient.SetQueueAttributes(request); if (outcome.IsSuccess()) { std::cout << "Successfully set dead letter queue for queue " << srcQueueUrl << " to " << deadLetterQueueARN << std::endl; } else { std::cerr << "Error setting dead letter queue for queue " << srcQueueUrl << ": " << outcome.GetError().GetMessage() << std::endl; }
전체 예제
추가 정보
-
Amazon Simple Queue Service 개발자 안내서의 Dead Letter Queue(DLQ) 사용
-
Amazon Simple Queue Service API 참조의 SetQueueAttributes