Spring 将多个 RabbitMQ 侦听器引导到单个容器

Spring Boot Multiple RabbitMQ Listeners to Single Container

我正在使用 spring 引导(基于注释)开发 RabbitMQ。我正在尝试将多个侦听器添加到单个容器,但只有一个侦听器工作。

我能够初始化两个容器并为每个容器分配单独的消息侦听器。这是否是在每个容器都有各自的侦听器的情况下添加多个侦听器的唯一方法? 我正在使用 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;
    }

在springxml中,我可以在一个容器中添加两个监听器

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

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

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

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