我正在开发一个使用Amazon的应用程序。我是AWS的新手,所以我对接收来自SQS的消息有一个小小的疑问。我已经配置了一个SQS,并希望通过使用长轮询从它接收消息。我的问题是,我最多可以从SQS中得到多少条消息?
我已经将MaxNumberOfMessages
设置为50,ReceiveMessageWaitTimeSeconds
设置为20。
Q1。我能从SQS得到最多50条消息吗?
Q2。ReceiveMessageWaitTimeSeconds
有什么关系?我在AWS文档中看到,短轮询是= 0 sec
,长轮询超过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
}
发布于 2019-10-29 06:05:28
长轮询仅仅意味着当没有消息可用时,Amazon将在返回结果之前等待一定时间。这样,SQS将延迟响应,直到配置的时间过去,或者消息可用的,而不是不断地请求消息。
这有点像让孩子坐在汽车后座上说:“我们到了吗?”每秒钟一次。长时间的投票增加了他们之间的提问时间。
通过ReceiveMessage()
调用提供的最大消息数为10。文档中写着:“有效值:1到10”。
发布于 2019-10-29 06:06:46
"setMaxNumberOfMessages“:这是对SQS一次发送给您的消息数量的上限。它可以发送低于设定的限制,但永远不会超过限制在一个响应。
"ReceiveMessageWaitTimeSeconds":如果设置为零,如果没有可用的消息,您将收到大量空响应。但是,将其设置为大于零可以进行长时间的投票。例如,如果将此参数设置为5秒,队列将等待至少5秒,如果它没有收到消息(从而避免给出空响应),但是如果它在5秒内收到消息,它将立即发送响应。
但是,如果队列在5秒后也无法得到消息,那么它才会以空消息进行响应。因此,这个超时必须根据您期望接收的消息数量来调整,如果消息较少,那么您可以等待更长的时间。
https://stackoverflow.com/questions/58601917
复制相似问题