使用 Amazon SQS 消息队列
消息队列是用于在 Amazon SQS 中可靠地发送消息的逻辑容器。有两种类型的队列:标准 和先进先出 (FIFO)。要了解有关队列以及这些类型之间的差异的更多信息,请参阅 Amazon Simple Queue Service 开发人员指南。
这些 C++ 示例展示了如何使用适用于 C++ 的 AWS SDK 来创建、列出、删除和获取 Amazon SQS 队列的 URL。
先决条件
在开始之前,建议您先阅读开始使用适用于 C++ 的 AWS SDK。
下载示例代码并按代码示例入门中所述构建解决方案。
要运行这些示例,您的代码用于发出请求的用户配置文件必须在 AWS 中具有适当的权限(用于服务和操作)。有关更多信息,请参阅提供 AWS 凭证。
创建队列
使用 SQSClient 类的 CreateQueue 成员函数,并向其提供一个描述队列参数的 CreateQueueRequest 对象。
包含
#include <aws/core/Aws.h> #include <aws/sqs/SQSClient.h> #include <aws/sqs/model/CreateQueueRequest.h> #include <iostream>
代码
Aws::SQS::SQSClient sqsClient(clientConfiguration); Aws::SQS::Model::CreateQueueRequest request; request.SetQueueName(queueName); const Aws::SQS::Model::CreateQueueOutcome outcome = sqsClient.CreateQueue(request); if (outcome.IsSuccess()) { std::cout << "Successfully created queue " << queueName << " with a queue URL " << outcome.GetResult().GetQueueUrl() << "." << std::endl; } else { std::cerr << "Error creating queue " << queueName << ": " << outcome.GetError().GetMessage() << std::endl; }
请参阅完整示例
列出队列
要列出您账户的亚马逊 SQS 队列,请调用 SQSClient 类的 ListQueues 成员函数,然后向其传递一个 ListQueuesRequest 对象。
包含
#include <aws/core/Aws.h> #include <aws/sqs/SQSClient.h> #include <aws/sqs/model/ListQueuesRequest.h> #include <iostream>
代码
Aws::SQS::SQSClient sqsClient(clientConfiguration); Aws::SQS::Model::ListQueuesRequest listQueuesRequest; Aws::String nextToken; // Used for pagination. Aws::Vector<Aws::String> allQueueUrls; do { if (!nextToken.empty()) { listQueuesRequest.SetNextToken(nextToken); } const Aws::SQS::Model::ListQueuesOutcome outcome = sqsClient.ListQueues( listQueuesRequest); if (outcome.IsSuccess()) { const Aws::Vector<Aws::String> &queueUrls = outcome.GetResult().GetQueueUrls(); allQueueUrls.insert(allQueueUrls.end(), queueUrls.begin(), queueUrls.end()); nextToken = outcome.GetResult().GetNextToken(); } else { std::cerr << "Error listing queues: " << outcome.GetError().GetMessage() << std::endl; return false; } } while (!nextToken.empty()); std::cout << allQueueUrls.size() << " Amazon SQS queue(s) found." << std::endl; for (const auto &iter: allQueueUrls) { std::cout << " " << iter << std::endl; }
请参阅完整示例
获取队列的 URL
要获取现有 Amazon SQS 队列的 URL,请调用 SQSClient 类 GetQueueUrl 成员函数。
包含
#include <aws/core/Aws.h> #include <aws/sqs/SQSClient.h> #include <aws/sqs/model/GetQueueUrlRequest.h> #include <iostream>
代码
Aws::SQS::SQSClient sqsClient(clientConfiguration); Aws::SQS::Model::GetQueueUrlRequest request; request.SetQueueName(queueName); const Aws::SQS::Model::GetQueueUrlOutcome outcome = sqsClient.GetQueueUrl(request); if (outcome.IsSuccess()) { std::cout << "Queue " << queueName << " has url " << outcome.GetResult().GetQueueUrl() << std::endl; } else { std::cerr << "Error getting url for queue " << queueName << ": " << outcome.GetError().GetMessage() << std::endl; }
请参阅完整示例
删除队列
向 SQSClient 类的 DeleteQueue 成员函数的提供 URL。
包含
#include <aws/core/Aws.h> #include <aws/core/client/DefaultRetryStrategy.h> #include <aws/sqs/SQSClient.h> #include <aws/sqs/model/DeleteQueueRequest.h> #include <iostream>
代码
Aws::SQS::Model::DeleteQueueRequest request; request.SetQueueUrl(queueURL); const Aws::SQS::Model::DeleteQueueOutcome outcome = sqsClient.DeleteQueue(request); if (outcome.IsSuccess()) { std::cout << "Successfully deleted queue with url " << queueURL << std::endl; } else { std::cerr << "Error deleting queue " << queueURL << ": " << outcome.GetError().GetMessage() << std::endl; }
请参阅完整示例
更多信息
-
《Amazon Simple Queue Service 开发人员指南》中的 Amazon SQS 队列的工作方式
-
《Amazon Simple Queue Service API 参考》中的 CreateQueue
-
《Amazon Simple Queue Service API 参考》中的 GetQueueUrl
-
《Amazon Simple Queue Service API 参考》中的 ListQueues
-
《Amazon Simple Queue Service API 参考》中的 DeleteQueues