Amazon SQS:同一条消息被两个当前消费者消费

Amazon SQS: The same message is consumed by two current consumers

我有四个当前消费者在 Amazon AWS 上收听同一个队列。从队列中拉取消息时,有时会出现同一条消息被两个不同的消费者消费的情况。请看下面的日志:

18:01:46,515 [jmsContainer-2] DEBUG - 从队列中收到消息:ID:3698a927-930b-4d6a-aeca-f66922528792

18:02:12,825 [jmsContainer-3] DEBUG - 从队列中收到消息:ID:3698a927-930b-4d6a-aeca-f66922528792

我有一个包含 4 个并发使用者的 JMS 容器设置。我将可见性超时设置为 30 秒。

既然container2收到了消息,怎么container3还能访问呢?

JMS 容器是在执行监听器方法(handleMessage)之前还是之后自动确认?

亚马逊不保证使用 SQS 准确一次送达。他们保证 "at least once" 交货。这在常见问题解答 https://aws.amazon.com/sqs/faqs/

中得到解决

您必须牢记这一点并设计您的系统以优雅地处理重复的消息传递。

这现在可以通过 FIFO SQS 队列实现。您可以确保只有一个客户端收到消息,然后在消息 in-flight

时将其删除

更多信息在这里:

https://aws.amazon.com/about-aws/whats-new/2016/11/amazon-sqs-introduces-fifo-queues-with-exactly-once-processing-and-lower-prices-for-standard-queues/