java - Spring Boot 多个 RabbitMQ 监听器到单个容器

标签 java spring-boot spring-amqp

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

我能够初始化两个容器并为每个容器分配单独的消息监听器。这是否是在每个容器都有各自的监听器的情况下添加多个监听器的唯一方法? 我正在使用 ChannelAwareMessageListener 接口(interface),这样我就可以单独处理消息并确认它们。我不想使用 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注解的基础上给一个容器添加两个监听器呢?或者我应该采用一个容器一个监听器的方式?

最佳答案

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

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

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

关于java - Spring Boot 多个 RabbitMQ 监听器到单个容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39629152/

相关文章:

java - backStack 中的 fragment

spring-boot - @ConfigurationProperties引用本身引用其他属性的属性

spring-boot - Spring AMQP - 发布者确认在发布到不存在的队列时返回 ack-ed

java - str[newLength] = '\0' 是什么意思?

java - 是否有 Lombok 方法来初始化从其他字段计算的最终字段?

spring-boot - 在模型内部构造一个arraylist

java - Spring JPA 无法将参数传递到引号中

rabbitmq - 使用 Spring AMQP 同步消息时如何回复?

java - 从 Java/Spring 检索 RabbitMQ 队列中未确认消息的数量

java - 用 Java 读取 XLSX 文件