将receiveMessageRequest执行到相同的SQS FIFO队列

时间:2017-11-09 08:50:16

标签: java lambda aws-lambda amazon-sqs

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

第一个实例将收到前10个消息,第二个实例将收到0个消息,即使队列中总共有15个消息。

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

1 个答案:

答案 0 :(得分:2)

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

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