java - 对同一个 SQS FIFO 队列执行 receiveMessageRequest

标签 java lambda aws-lambda amazon-sqs

我有两个 lambda 实例同时运行,这两个实例将对同一个 FIFO 队列进行一次短轮询,间隔仅几秒钟。

尽管队列中总共有 15 条消息,第一个实例将接收前 10 条消息,第二个实例将接收 0 条消息。

为什么第二个实例无法从队列中获取剩余的 5 条消息?这是预期的行为吗?我该如何克服它?

最佳答案

您的 15 条消息(很可能)都属于同一个消息组 ID。因此,在成功处理并删除前 10 个之前,剩余 5 个将无法供您的消费者使用。对于 FIFO 队列,这是保留消息顺序的预期行为(为 @Michael-sqlbot 欢呼,根据下面的评论用这个答案指出了正确的方向)。

使用long polling对于标准队列。短轮询不会检查每个 SQS 服务器,因此,它有可能无法获得所有结果。长轮询会检查所有 SQS 服务器,因此将获得所有结果。

关于java - 对同一个 SQS FIFO 队列执行 receiveMessageRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47197479/

相关文章:

java - 如何在JScience中使用稀疏 vector 类?

java - "Unrecognized option: --add-opens" super 账本贝苏

Python使用key和lambda进行排序,lambda有什么作用?

node.js - 无法使用无服务器框架和 TypeScript 从 Lambda 层导入模块

node.js - 使用 Nodejs 重命名文件

Java tomcat声音

linq - 了解 LINQ 中的 =>

lambda - Java 8 中有多个参数的消费者?

email - SES 是从 Lambda 发送电子邮件的唯一方式吗?

带参数的 Java 泛型 - 继承