在 &SQS; 中使用死信队列 - AWS SDK for C++

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在 &SQS; 中使用死信队列

Amazon SQS 支持死信队列。死信队列是一个专门接收其他队列中无法被成功处理的消息的队列。您可以在死信队列中留出和隔离这些消息以确定其处理失败的原因。

要创建死信队列,您必须先创建一个重新驱动策略,然后在队列属性中设置该策略。

重要

死信队列必须与源队列属于相同的队列类型(FIFO 或标准)。它还必须与源队列使用相同的 AWS 账户和 AWS 区域创建。

先决条件

在开始之前,建议您先阅读开始使用AWS SDK for C++

下载示例代码并按代码示例入门中所述构建解决方案。

要运行这些示例,您的代码用于发出请求的用户配置文件必须在 AWS 中具有适当的权限(用于服务和操作)。有关更多信息,请参阅提供 AWS 凭证

创建重新驱动策略

重新驱动策略在 JSON 中指定。要创建重新驱动策略,您可以使用AWS SDK for C++ 随附的 JSON 实用程序类。

这是一个示例函数,它通过为您提供死信队列的 ARN 和消息在被发送到死信队列之前可以被接收而不被处理的最大次数来创建一个重新驱动策略。

包含

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

请参阅完整示例

在源队列上设置重新驱动策略

要完成死信队列的设置,需调用 SQSClient 类的 SetQueueAttributes 成员函数,并传入一个 SetQueueAttributesRequest 对象(在该对象中,您已通过 JSON 重新驱动策略设置了 RedrivePolicy 属性)。

包含

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

请参阅完整示例

更多信息