Amazon SQS에서 DLQ(Dead Letter Queue) 사용 - AWS SDK for C++

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

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

전체 예제를 참조하세요.

추가 정보