我正在开发一个使用 Amazon SQS 的应用程序。我是 AWS 新手,所以我对从 SQS 接收消息有一个小疑问。我已经配置了一个 SQS,并希望通过使用长轮询从它接收消息。我的问题是我最多可以从 SQS 收到多少条消息?
我已将 MaxNumberOfMessages
设置为 50,将 ReceiveMessageWaitTimeSeconds
设置为 20。
Q1。我最多可以从 SQS 收到 50 条消息吗?
第二季度。 ReceiveMessageWaitTimeSeconds
有什么关系?我在 AWS 文档中读到,短轮询是 = 0 秒
,长轮询是超过 0 秒的时间。这是否意味着我也可以设置 ReceiveMessageWaitTimeSeconds = 5 来确保长轮询?
我还阅读了短轮询和长轮询之间的区别,因为前者只会查询 SQS 服务器的子集,而后者将查询所有服务器。那么除了等待 5 秒或 20 秒这一事实之外,秒数还重要吗?
我已阅读以下 AWS 文档:
示例代码如下:
CreateQueueRequest createQueueRequest = new CreateQueueRequest().withQueueName(queueName);
String queueUrl = sqs.createQueue(createQueueRequest).getQueueUrl();
ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(queueUrl);
receiveMessageRequest.setMaxNumberOfMessages(50);
receiveMessageRequest.setReceiveMessageWaitTimeSeconds(20);
List<Message> messages = sqs.receiveMessage(receiveMessageRequest).getMessages();
for (Message message : messages) {
// I'm a message from SQS
}
最佳答案
长轮询只是意味着,当没有可用消息时,Amazon SQS 将等待一定时间然后返回结果。这样,SQS 将延迟响应,直到配置的时间已过或有消息可用,而不是不断请求消息。
这有点像让 child 坐在汽车后座上说“我们到了吗?”每秒一次。长轮询增加了询问之间的时间。
通过 ReceiveMessage()
调用提供的最大消息数为 10。文档显示:“有效值:1 到 10。”
关于java - 每次批量调用从 SQS 接收的消息数量是否限制为 10 条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58601917/