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
时将其删除
更多信息在这里:
我有四个当前消费者在 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
时将其删除更多信息在这里: