此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring AMQP 3.2.6spring-doc.cadn.net.cn

使用容器工厂

引入了侦听器容器工厂来支持@RabbitListener并向RabbitListenerEndpointRegistry,如编程终结点注册中所述。spring-doc.cadn.net.cn

从版本 2.1 开始,它们可用于创建任何侦听器容器——甚至是没有侦听器的容器(例如在 Spring Integration 中使用)。当然,必须在容器启动之前添加侦听器。spring-doc.cadn.net.cn

有两种方法可以创建此类容器:spring-doc.cadn.net.cn

以下示例显示如何使用SimpleRabbitListenerEndpoint要创建侦听器容器:spring-doc.cadn.net.cn

@Bean
public SimpleMessageListenerContainer factoryCreatedContainerSimpleListener(
        SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory) {
    SimpleRabbitListenerEndpoint endpoint = new SimpleRabbitListenerEndpoint();
    endpoint.setQueueNames("queue.1");
    endpoint.setMessageListener(message -> {
        ...
    });
    return rabbitListenerContainerFactory.createListenerContainer(endpoint);
}

以下示例展示了如何在创建后添加监听器:spring-doc.cadn.net.cn

@Bean
public SimpleMessageListenerContainer factoryCreatedContainerNoListener(
        SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory) {
    SimpleMessageListenerContainer container = rabbitListenerContainerFactory.createListenerContainer();
    container.setMessageListener(message -> {
        ...
    });
    container.setQueueNames("test.no.listener.yet");
    return container;
}

无论哪种情况,监听器也可以是ChannelAwareMessageListener,因为它现在是MessageListener.spring-doc.cadn.net.cn

如果您希望创建多个具有相似属性的容器或使用预配置的容器工厂(例如 Spring Boot 自动配置或两者提供的容器工厂),这些技术非常有用。spring-doc.cadn.net.cn

以这种方式创建的容器是正常的@Bean实例,并且未在RabbitListenerEndpointRegistry.