本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
发送、接收和删除 SQS 消息
始终使用 SQS 队列发送消息。这些 C++ 示例向您展示了如何使用适用于 C++ 的 AWS SDK 发送、接收 Amazon SQS 消息以及从 SQS 队列中删除这些消息。
先决条件
在开始之前,建议您先阅读开始使用适用于 C++ 的 AWS SDK。
下载示例代码并按代码示例入门中所述构建解决方案。
要运行这些示例,您的代码用于发出请求的用户配置文件必须在 AWS 中具有适当的权限(用于服务和操作)。有关更多信息,请参阅提供 AWS 凭证。
发送消息
通过调用 SQSClient 类的 SendMessage 成员函数,您可以将单个消息添加到 Amazon SQS 队列。您需向 SendMessage 提供一个 SendMessageRequest 对象,该对象应包含队列的 URL、消息正文以及可选的延迟值(以秒为单位)。
包含
#include <aws/core/Aws.h> #include <aws/sqs/SQSClient.h> #include <aws/sqs/model/SendMessageRequest.h> #include <iostream>
代码
Aws::SQS::SQSClient sqsClient(clientConfiguration); Aws::SQS::Model::SendMessageRequest request; request.SetQueueUrl(queueUrl); request.SetMessageBody(messageBody); const Aws::SQS::Model::SendMessageOutcome outcome = sqsClient.SendMessage(request); if (outcome.IsSuccess()) { std::cout << "Successfully sent message to " << queueUrl << std::endl; } else { std::cerr << "Error sending message to " << queueUrl << ": " << outcome.GetError().GetMessage() << std::endl; }
请参阅完整示例
接收消息
可通过调用 SQSClient 类的 ReceiveMessage 成员函数并为其传递队列的 URL,来检索当前位于队列中的任何消息。消息将作为一系列 Message 对象返回。
包含
#include <aws/core/Aws.h> #include <aws/sqs/SQSClient.h> #include <aws/sqs/model/ReceiveMessageRequest.h> #include <iostream>
代码
Aws::SQS::SQSClient sqsClient(clientConfiguration); Aws::SQS::Model::ReceiveMessageRequest request; request.SetQueueUrl(queueUrl); request.SetMaxNumberOfMessages(1); const Aws::SQS::Model::ReceiveMessageOutcome outcome = sqsClient.ReceiveMessage( request); if (outcome.IsSuccess()) { const Aws::Vector<Aws::SQS::Model::Message> &messages = outcome.GetResult().GetMessages(); if (!messages.empty()) { const Aws::SQS::Model::Message &message = messages[0]; std::cout << "Received message:" << std::endl; std::cout << " MessageId: " << message.GetMessageId() << std::endl; std::cout << " ReceiptHandle: " << message.GetReceiptHandle() << std::endl; std::cout << " Body: " << message.GetBody() << std::endl << std::endl; } else { std::cout << "No messages received from queue " << queueUrl << std::endl; } } else { std::cerr << "Error receiving message from queue " << queueUrl << ": " << outcome.GetError().GetMessage() << std::endl; }
请参阅完整示例
收到后删除消息
在收到消息并处理其内容后,可通过将消息的接收句柄和队列 URL 发送到 SQSClient 类的 DeleteMessage 成员函数,来从队列中删除消息。
包含
#include <aws/core/Aws.h> #include <aws/sqs/SQSClient.h> #include <aws/sqs/model/DeleteMessageRequest.h> #include <iostream>
代码
Aws::SQS::Model::DeleteMessageRequest request; request.SetQueueUrl(queueUrl); request.SetReceiptHandle(messageReceiptHandle); const Aws::SQS::Model::DeleteMessageOutcome outcome = sqsClient.DeleteMessage( request); if (outcome.IsSuccess()) { std::cout << "Successfully deleted message from queue " << queueUrl << std::endl; } else { std::cerr << "Error deleting message from queue " << queueUrl << ": " << outcome.GetError().GetMessage() << std::endl; }
请参阅完整示例
更多信息
-
《Amazon Simple Queue Service 开发人员指南》中的 Amazon SQS 队列的工作方式
-
《Amazon Simple Queue Service API 参考》中的 SendMessage
-
《Amazon Simple Queue Service API 参考》中的 SendMessageBatch
-
《Amazon Simple Queue Service API 参考》中的 ReceiveMessage
-
《Amazon Simple Queue Service API 参考》中的 DeleteMessage