コンテナーファクトリの使用

リスナーコンテナーファクトリは、プログラムによるエンドポイント登録に従って、@RabbitListener をサポートし、コンテナーを RabbitListenerEndpointRegistry に登録するために導入されました。

バージョン 2.1 から、これらを使用して任意のリスナーコンテナーを作成できます。リスナーのないコンテナー (Spring Integration で使用する場合など) も作成できます。もちろん、コンテナーを開始する前にリスナーを追加する必要があります。

このようなコンテナーを作成するには、次の 2 つの方法があります。

  • 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;
}

いずれの場合も、リスナーは MessageListener のサブインターフェースになっているため、ChannelAwareMessageListener にすることもできます。

これらの手法は、同様のプロパティを持つ複数のコンテナーを作成する場合、または Spring Boot 自動構成によって提供されるような事前構成されたコンテナーファクトリを使用する場合、またはその両方を使用する場合に役立ちます。

この方法で作成されたコンテナーは通常の @Bean インスタンスであり、RabbitListenerEndpointRegistry には登録されません。