java - 每次批量调用从 SQS 接收的消息数量是否限制为 10 条

标签 java amazon-web-services amazon-sqs

我正在开发一个使用 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/

相关文章:

json - 对于 S3 存储桶,在 TopicConfigurations 的 CloudFormation 中,属性 Event 的值必须为 String 类型

java - 无法为 Android Studio 插入值

java - 在 JPA 或 Hibernate 查询中使用 Constructor Result 会影响性能吗?

mysql - 是否可以在 Amazon RDS 上使用 MySQL UDF?

Grails 2.1.4 和 2.0.4 停止在 AWS Elastic Beanstalk 中提供随机 JS 和 CSS 文件

amazon-web-services - 将过滤策略应用于 SNS 订阅

java - NoSuchMethodError 因为找到了错误的类

java - 由类声明子类引起的 StackOverflowError?

amazon-web-services - 无法运行该应用,gradle给出了错误:No Such Field错误

symfony - 通过 AWS SDK 拒绝访问 SQS