使用容器工廠
引入監聽器容器工廠是為了支援 @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 中註冊。 |