@KafkaListener 注释中所述,a 用于为带注释的方法创建容器。ConcurrentKafkaListenerContainerFactorySpring中文文档

从版本 2.2 开始,您可以使用相同的工厂创建任何 . 如果要创建多个具有相似属性的容器,或者希望使用一些外部配置的工厂(例如Spring Boot自动配置提供的工厂),这可能很有用。 创建容器后,可以进一步修改其属性,其中许多属性是通过 设置的。 以下示例配置:ConcurrentMessageListenerContainercontainer.getContainerProperties()ConcurrentMessageListenerContainerSpring中文文档

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

    ConcurrentMessageListenerContainer<String, String> container =
        factory.createContainer("topic1", "topic2");
    container.setMessageListener(m -> { ... } );
    return container;
}
以这种方式创建的容器不会添加到终结点注册表中。 它们应创建为定义,以便将它们注册到应用程序上下文中。@Bean
以这种方式创建的容器不会添加到终结点注册表中。 它们应创建为定义,以便将它们注册到应用程序上下文中。@Bean

从版本 2.3.4 开始,您可以在创建和配置每个容器后向工厂添加 a 以进一步配置每个容器。ContainerCustomizerSpring中文文档

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

从 V3.1 开始,还可以通过在 KafkaListener 注释上指定“ContainerPostProcessor”的 Bean 名称,对单个侦听器应用相同类型的定制。Spring中文文档

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

...

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