我正在使用spring boot(基于Annotation)开发RabbitMQ。我试图将多个侦听器添加到单个容器,但只有一个侦听器工作。
我能够初始化两个容器并为每个容器分配单独的消息Listener。是否是添加多个侦听器的唯一方法,其中每个容器都有各自的侦听器? 我正在使用ChannelAwareMessageListener接口,以便我可以单独处理消息并确认它们。我不想使用RabbitListener,因为我无法确认该消息。
@Bean
@Qualifier("receiverContainer")
SimpleMessageListenerContainer receiverContainer(ConnectionFactory connectionFactory,@Qualifier("receiverAdapter") MessageListenerAdapter
listenerAdapter) {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.setQueueNames(queueName);
container.setMessageListener(listenerAdapter);
container.setAcknowledgeMode(AcknowledgeMode.MANUAL);
container.setAutoStartup(false);
return container;
}
在spring xml中,我可以将两个侦听器添加到一个容器
<rabbit:listener-container
connection-factory="connectionFactory" acknowledge="auto" concurrency="10"
requeue-rejected="true">
<rabbit:listener ref="myMessageListener" queues="spring.queue" />
<rabbit:listener ref="messageQueueManager" queues="user.login.notification" />
</rabbit:listener-container>
那么如何在spring boot annotation中为一个容器添加两个监听器呢?或者我应该采用一种容器 - 一种倾听方式?
答案 0 :(得分:2)
没有;每个容器只允许一个监听器。
使用XML命名空间时,虽然它“看起来”像有多个侦听器,但每个<rabbit:listener/>
元素实际上都有一个单独的容器。
<rabbit:listener-container/>
父元素只是为子元素创建的每个容器指定公共容器属性的便捷方式。