Spring Boot Single RabbitMQ Listener to Single Container

时间:2016-09-22 02:06:56

标签: java spring-boot spring-amqp

我正在使用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中为一个容器添加两个监听器呢?或者我应该采用一种容器 - 一种倾听方式?

1 个答案:

答案 0 :(得分:2)

没有;每个容器只允许一个监听器。

使用XML命名空间时,虽然它“看起来”像有多个侦听器,但每个<rabbit:listener/>元素实际上都有一个单独的容器。

<rabbit:listener-container/>父元素只是为子元素创建的每个容器指定公共容器属性的便捷方式。