使用容器工廠

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