此版本仍在开发中,目前尚不稳定。如需最新稳定版本,请使用 Spring AMQP 4.0.2spring-doc.cadn.net.cn

使用容器工厂

监听器容器工厂的引入是为了支持 @RabbitListener 和将容器注册到 RabbitListenerEndpointRegistry,如 程序化端点注册 中所讨论的。spring-doc.cadn.net.cn

从版本 2.1 开始,它们可用于创建任何监听器容器——甚至是没有监听器的容器(例如用于 Spring Integration 中)。<br>当然,必须在启动容器之前添加监听器。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 Boot自动配置所提供的)时非常有用,或者两者兼而有之。spring-doc.cadn.net.cn

以这种方式创建的容器是普通的 @Bean 实例,并未在 RabbitListenerEndpointRegistry 中注册。