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

Smi*_*irk 6 java jms message-queue amazon-sqs amazon-web-services

我有四个当前的消费者在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)之前或之后执行自动确认?

Mar*_*k B 8

亚马逊不保证一旦交付SQS.他们保证"至少一次"交付.这可以在FAQ https://aws.amazon.com/sqs/faqs/中找到.

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


小智 5

现在可以通过 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-队列/