Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 卡夫卡集装箱工厂是春天卡夫卡的要求吗?_Java_Spring_Apache Kafka_Spring Kafka - Fatal编程技术网

Java 卡夫卡集装箱工厂是春天卡夫卡的要求吗?

Java 卡夫卡集装箱工厂是春天卡夫卡的要求吗?,java,spring,apache-kafka,spring-kafka,Java,Spring,Apache Kafka,Spring Kafka,我有一个简单的消费者在春季工作。我用一堆工厂定义了一个配置类,等等。当我删除配置类时,使用者仍然可以工作。我想知道拥有工厂的好处,即: @Bean 公共ConcurrentKafkaListenerContainerFactory kafkaListenerContainerFactory(){ ConcurrentKafkListenerContainerFactory=新ConcurrentKafkListenerContainerFactory(); setConsumerFactory(

我有一个简单的消费者在春季工作。我用一堆工厂定义了一个配置类,等等。当我删除配置类时,使用者仍然可以工作。我想知道拥有工厂的好处,即:

@Bean
公共ConcurrentKafkaListenerContainerFactory kafkaListenerContainerFactory(){
ConcurrentKafkListenerContainerFactory=新ConcurrentKafkListenerContainerFactory();
setConsumerFactory(consumerFactory());
factory.setBatchListener(true);
返回工厂;
}
公共消费者工厂消费者工厂(){
返回新的DefaultKafkConsumerFactory(retrieveConsumerConfigs());
}

现在只需通过应用程序属性传递VAL,并结束一天。在基于类的方法中,我对配置有明确的控制权,但我也认为可以删除该类,并通过spring env变量(例如spring.kafka.bootstrapserver)提供VAL。

容器工厂是
@KafkaListener
方法所必需的

如果您不提供自己的bean,SpringBoot将自动配置一个(来自application.properties/yml)。请参见《卡夫卡自动配置》

引导还将配置消费者工厂(如果您没有)

应用程序通常不需要声明任何基础结构bean

编辑

我宁愿从不声明我自己的基础结构bean。如果我需要一些不作为启动属性公开的特性,或者我只想覆盖一个容器的某些属性,我只需添加一个定制器bean

@组件
类定制器{
公共定制器(ConcurrentKafkaListenerContainerFactory工厂){
factory.setContainerCustomizer(容器->{
if(container.getContainerProperties().getGroupId().equals(“slowGroup”)){
container.getContainerProperties().setIdleBeweenPolls(60_000);
}
});
}
}

@组件
类定制器{
定制器(AbstractKafkaListenerContainerFactory containerFactory,
ThreadPoolTaskExecutor(线程池任务执行器执行器){
containerFactory.getContainerProperties().setConsumerTaskExecutor(exec);
}
}

等等。

集装箱工厂需要
@KafkaListener
方法

如果您不提供自己的bean,SpringBoot将自动配置一个(来自application.properties/yml)。请参见《卡夫卡自动配置》

引导还将配置消费者工厂(如果您没有)

应用程序通常不需要声明任何基础结构bean

编辑

我宁愿从不声明我自己的基础结构bean。如果我需要一些不作为启动属性公开的特性,或者我只想覆盖一个容器的某些属性,我只需添加一个定制器bean

@组件
类定制器{
公共定制器(ConcurrentKafkaListenerContainerFactory工厂){
factory.setContainerCustomizer(容器->{
if(container.getContainerProperties().getGroupId().equals(“slowGroup”)){
container.getContainerProperties().setIdleBeweenPolls(60_000);
}
});
}
}

@组件
类定制器{
定制器(AbstractKafkaListenerContainerFactory containerFactory,
ThreadPoolTaskExecutor(线程池任务执行器执行器){
containerFactory.getContainerProperties().setConsumerTaskExecutor(exec);
}
}

等等。

Spring中的简单消费者正在工作,因为引擎罩后面的Spring boot自动配置创建了一个
ConcurrentKafkAlisterContainerFactory
的对象,并将其注册到Spring容器中

您可以通过注入
KafkaListenerContainerFactory的实现来验证它,如下所示:

@RestController
public class EmployeeController {

    private final KafkaListenerContainerFactory kafkaListenerContainerFactory;

    @Autowired
    public EmployeeController(KafkaListenerContainerFactory kafkaListenerContainerFactory) {
        System.out.println(kafkaListenerContainerFactory instanceof ConcurrentKafkaListenerContainerFactory);
        this.kafkaListenerContainerFactory = kafkaListenerContainerFactory;
    }
}

但是如果您对spring boot的自动生成bean不满意,您可以通过使用
@bean
注释创建您自己的bean并将其注册到spring容器中,spring working中的简单消费者,因为引擎罩后面的spring boot auto configuration创建了
ConcurrentKafKafkaListenerContainerFactory的对象并将其注册到spring容器中

您可以通过注入
KafkaListenerContainerFactory的实现来验证它,如下所示:

@RestController
public class EmployeeController {

    private final KafkaListenerContainerFactory kafkaListenerContainerFactory;

    @Autowired
    public EmployeeController(KafkaListenerContainerFactory kafkaListenerContainerFactory) {
        System.out.println(kafkaListenerContainerFactory instanceof ConcurrentKafkaListenerContainerFactory);
        this.kafkaListenerContainerFactory = kafkaListenerContainerFactory;
    }
}

但是如果您对spring boot的自动生成bean不满意,您可以创建自己的bean,并使用
@bean
注释将其注册到spring容器中。我让一切都正常工作了,移除我的类并通过属性进行委派非常好。对此有何想法?也许如果我需要更多的控制,一个类是有意义的,但除了手动确认等,我没有做太多的工作。
>对此有何想法?如果我需要更多的控件,那么类就有意义了,
请查看对我答案的编辑。谢谢Gary。我让一切都正常工作了,移除我的类并通过属性进行委派非常好。对此有何想法?也许如果我需要更多的控制,一个类是有意义的,但除了手动确认等,我没有做太多的工作。
>对此有何想法?如果我需要更多的控件,那么类就有意义了,
请参见对我答案的编辑。