Spring AMQP 多线程调用消息监听器

Spring AMQP multiple threads calling into message listener

我有一个 DirectRabbitListenerContainer(通过 DirectRabbitListenerContainerFactory 创建),其中我通过 MessageListenerAdapter 设置了 MessageListener。

我遇到的问题是,有时来自 RabbitMQ 的相同消息会通过不同的线程多次到达 MessageListener。

[2020-06-16 11:12:45,910] INFO com.something.MyMsgListener [pool-1-thread-3] Message ID:bca8cdcc-385a-4847-bd15-50e8936 [2020-06-16 11:12:45,910] INFO com.something.MyMsgListener [pool-1-thread-8] Message ID:bca8cdcc-385a-4847-bd15-50e8936

这对我正在编写的应用程序造成了很多问题。我想知道是否有人可以指出是哪个配置项导致了这个(或者可以防止这个)。在消息生成器端,我知道只生成了 1 条消息并发送到 RabbitMQ。有时多达 6 个线程将处理同一条消息。有时问题会消失。我不太清楚为什么会这样...任何帮助将不胜感激。

谢谢!

这是不可能的,除非 pool-1-thread-3 调用的侦听器抛出异常并重新传递消息。

无法保证重新传送将到达同一线程,因为它使用由 amqp-client 管理的线程池。

对于 SimpleMessageListenerContainerconcurrency=1,重新传送将始终发生在同一线程上。