本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 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; }
请参阅完整示例
更多信息
-
《Amazon Simple Queue Service 开发人员指南》中的可见性超时
-
《Amazon Simple Queue Service API 参考》中的 SetQueueAttributes
-
《Amazon Simple Queue Service API 参考》中的 GetQueueAttributes
-
《Amazon Simple Queue Service API 参考》中的 ReceiveMessage
-
《Amazon Simple Queue Service API 参考》中的 ChangeMessageVisibility
-
《Amazon Simple Queue Service API 参考》中的 ChangeMessageVisibilityBatch