在 Amazon SQS 中设置可见性超时 - 适用于 C++ 的 AWS SDK

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

在 Amazon SQS 中设置可见性超时

为了确保消息接收,在 Amazon SQS 中收到的消息会保留在队列中,直到被删除。在指定的可见性超时时间后,已接收但未删除的消息将可以在后续请求中使用,以帮助防止在对消息进行处理和删除之前重复接收消息。

使用标准队列时,可见性超时无法保证不会接收消息两次。如果您使用的是标准队列,请确保您的代码能够处理多次收到同一条消息的情况。

先决条件

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

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

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

设置接收消息时的消息可见性超时

当您收到消息时,可以通过在 ChangeMessageVisibilityRequest 中传入该消息的接收句柄,并将其传递给 SQSClient 类的 ChangeMessageVisibility 成员函数,来修改该消息的可见性超时时间。

包含

#include <aws/core/Aws.h> #include <aws/sqs/SQSClient.h> #include <aws/sqs/model/ChangeMessageVisibilityRequest.h> #include <aws/sqs/model/ReceiveMessageRequest.h> #include <iostream>

代码

Aws::SQS::Model::ChangeMessageVisibilityRequest request; request.SetQueueUrl(queue_url); request.SetReceiptHandle(messageReceiptHandle); request.SetVisibilityTimeout(visibilityTimeoutSeconds); auto outcome = sqsClient.ChangeMessageVisibility(request); if (outcome.IsSuccess()) { std::cout << "Successfully changed visibility of message " << messageReceiptHandle << " from queue " << queue_url << std::endl; } else { std::cout << "Error changing visibility of message from queue " << queue_url << ": " << outcome.GetError().GetMessage() << std::endl; }

请参阅完整示例

更多信息