Amazon SQS:两个当前消费者使用相同的消息

时间:2016-03-15 22:12:35

标签: java amazon-web-services jms message-queue amazon-sqs

我有四个当前的消费者在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收到了消息,容器3怎么还能访问它?

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

2 个答案:

答案 0 :(得分:6)

亚马逊并不保证一旦交付SQS。他们保证“至少一次”交付。这在FAQ https://aws.amazon.com/sqs/faqs/

中得到了解决

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

答案 1 :(得分:0)

现在可以使用FIFO SQS队列。您可以确保正好有一个客户端收到邮件,然后在邮件进行中将其删除

更多信息在这里:

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/