コンテナーファクトリ

@KafkaListener アノテーションに従って、ConcurrentKafkaListenerContainerFactory はアノテーション付きメソッドのコンテナーを作成するために使用されます。

バージョン 2.2 以降、同じファクトリを使用して任意の ConcurrentMessageListenerContainer を作成できます。これは、同様のプロパティを持つ複数のコンテナーを作成する場合、または Spring Boot 自動構成によって提供されるような外部構成済みのファクトリを使用する場合に役立つ場合があります。コンテナーが作成されたら、そのプロパティをさらに変更できます。その多くは container.getContainerProperties() を使用して設定されます。次の例では、ConcurrentMessageListenerContainer を構成します。

@Bean
public ConcurrentMessageListenerContainer<String, String>(
        ConcurrentKafkaListenerContainerFactory<String, String> factory) {

    ConcurrentMessageListenerContainer<String, String> container =
        factory.createContainer("topic1", "topic2");
    container.setMessageListener(m -> { ... } );
    return container;
}
この方法で作成されたコンテナーは、エンドポイントレジストリに追加されません。これらは、アプリケーションコンテキストに登録されるように、@Bean 定義として作成する必要があります。

バージョン 2.3.4 以降、ContainerCustomizer をファクトリに追加して、作成および構成後に各コンテナーをさらに構成できます。

@Bean
public KafkaListenerContainerFactory<?> kafkaListenerContainerFactory() {
    ConcurrentKafkaListenerContainerFactory<Integer, String> factory =
            new ConcurrentKafkaListenerContainerFactory<>();
    ...
    factory.setContainerCustomizer(container -> { /* customize the container */ });
    return factory;
}

バージョン 3.1 以降では、KafkaListener アノテーションで "ContainerPostProcessor" の Bean 名を指定することで、単一のリスナーに同じ種類のカスタマイズを適用することも可能です。

@Bean
public ContainerPostProcessor<String, String, AbstractMessageListenerContainer<String, String>> customContainerPostProcessor() {
    return container -> { /* customize the container */ };
}

...

@KafkaListener(..., containerPostProcessor="customContainerPostProcessor", ...)