使用容器工厂
引入侦听器容器工厂是为了支持@RabbitListener
并使用RabbitListenerEndpointRegistry
,如 编程端点注册.
从版本 2.1 开始,它们可用于创建任何侦听器容器——甚至是没有侦听器的容器(例如在 Spring Integration 中使用)。 当然,在容器启动之前必须添加侦听器。
有两种方法可以创建此类容器:
-
使用 SimpleRabbitListenerEndpoint
-
创建后添加侦听器
以下示例演示如何使用SimpleRabbitListenerEndpoint
要创建侦听器容器,请执行以下作:
@Bean
public SimpleMessageListenerContainer factoryCreatedContainerSimpleListener(
SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory) {
SimpleRabbitListenerEndpoint endpoint = new SimpleRabbitListenerEndpoint();
endpoint.setQueueNames("queue.1");
endpoint.setMessageListener(message -> {
...
});
return rabbitListenerContainerFactory.createListenerContainer(endpoint);
}
以下示例演示如何在创建后添加侦听器:
@Bean
public SimpleMessageListenerContainer factoryCreatedContainerNoListener(
SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory) {
SimpleMessageListenerContainer container = rabbitListenerContainerFactory.createListenerContainer();
container.setMessageListener(message -> {
...
});
container.setQueueNames("test.no.listener.yet");
return container;
}
在任何一种情况下,侦听器也可以是ChannelAwareMessageListener
,因为它现在是MessageListener
.
如果您希望创建多个具有相似属性的容器或使用预配置的容器工厂(例如 Spring Boot 自动配置提供的容器工厂),或两者兼而有之,这些技术非常有用。
以这种方式创建的容器是正常的@Bean 实例,并且未在RabbitListenerEndpointRegistry . |