java Amazon SQS:两个当前消费者使用相同的消息
我现在有四个消费者在亚马逊AWS上收听同一个队列。从队列中下拉消息时,有时会出现两个不同的使用者使用同一消息的情况。请参阅下面的日志:
18:01:46515[jmsContainer-2]调试-从队列接收到消息:ID:3698a927-930b-4d6a-aeca-f66922528792
18:02:12825[jmsContainer-3]调试-从队列接收到消息:ID:3698a927-930b-4d6a-aeca-f66922528792
我有一个带有4个并发使用者的JMS容器设置。我把可视性超时设置为30秒
既然消息是由container2接收的,为什么container3仍然能够访问它
JMS容器是在侦听器方法(handleMessage)执行之前还是之后进行自动确认
# 1 楼答案
这在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/
# 2 楼答案
亚马逊不保证使用SQS只交付一次。他们保证“至少一次”交货。这在常见问题解答https://aws.amazon.com/sqs/faqs/中有介绍
您必须记住这一点,并设计系统以优雅地处理重复的消息传递