我有两个 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/