首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将默认容器工厂bean从kafkaListenerContainerFactory更改为我的自定义容器工厂

将默认容器工厂bean从kafkaListenerContainerFactory更改为我的自定义容器工厂
EN

Stack Overflow用户
提问于 2020-01-28 19:23:09
回答 1查看 2.8K关注 0票数 4

在spring文档中,我们可以看到默认容器工厂可以使用kafkaListenerContainerFactory的bean名称,除非通过配置提供了显式的缺省值。

我想问一下,是否可以更改配置以使用我的自定义容器工厂bean (例如。customKafkaListenerContainerFactory)不是kafkaListenerContainerFactory

如果我们键入->代码示例

代码语言:javascript
运行
复制
@KafkaListener(id = "cat", topics = "myTopic")
public void listen(String data, Acknowledgment ack) {
    ...
    ack.acknowledge();
}

那么默认的containerFactory bean是customKafkaListenerContainerFactory而不是kafkaListenerContainerFactory

更准确地说, ->,如果我不提供任何containerFactory属性,则使用customKafkaListenerContainerFactory而不是kafkaListenerContainerFactory

EN

回答 1

Stack Overflow用户

发布于 2020-01-28 19:25:43

是的,可以通过在containerFactory注释中使用@KafkaListener属性,可以设置定制的kafka容器工厂bean。

用于创建负责服务此端点的消息侦听器容器的KafkaListenerContainerFactory的bean名称。

代码语言:javascript
运行
复制
@KafkaListener(id = "cat", topics = "myTopic", containerFactory="customKafkaListenerContainerFactory")
public void listen(String data, Acknowledgment ack) {
   ...
  ack.acknowledge();
}

也可以重写Config类中的默认kafkaListenerContainerFactory。正如@Gary所说的那样,它将使用相同的bean名来代替Boot,而Boot是以bean的存在为条件的

代码语言:javascript
运行
复制
@Configuration
@EnableKafka
public class Config {

   @Bean
   @ConditionalOnMissingBean(name = "kafkaListenerContainerFactory")
   ConcurrentKafkaListenerContainerFactory<Integer, String>
                    kafkaListenerContainerFactory(ConcurrentKafkaListenerContainerFactoryConfigurer configurer) {
    ConcurrentKafkaListenerContainerFactory<Integer, String> factory =
                            new ConcurrentKafkaListenerContainerFactory<>();
    configurer.configure(factory,consumerFactory());
    // set custom properties
    return factory;
   }

   @Bean
   public ConsumerFactory<Integer, String> consumerFactory() {
      return new DefaultKafkaConsumerFactory<>(consumerConfigs());
   }

   @Bean
   public Map<String, Object> consumerConfigs() {
    Map<String, Object> props = new HashMap<>();
    props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, embeddedKafka.getBrokersAsString());
    ...
    return props;
  }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59955687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档