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

问题描述 投票:0回答:1

我有一个 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个线程会处理同一条消息。有时问题会消失。我不清楚为什么会发生这种情况......任何帮助都将非常感激。

谢谢!我有一个DirectRabbitList。

spring rabbitmq spring-amqp spring-rabbitmq
1个回答
0
投票

这是不可能的,除非监听器由 pool-1-thread-3 抛出一个异常,消息被重新交付。

由于使用了amqp-client管理的线程池,所以不能保证重递会在同一个线程上到达。

在使用 SimpleMessageListenerContainerconcurrency=1在同一条线上,转送总是会发生。

© www.soinside.com 2019 - 2024. All rights reserved.