繁体   English   中英

使用@KafkaListener 时以编程方式设置属性

[英]Programmatically setting properties when using @KafkaListener

我在 Spring Boot 应用程序中使用了@KafkaListener注释,而没有创建自定义的KafkaListenerContainerFactory bean。 我目前正在我的 application.yml 文件中设置spring.kafka.consumer.value-deserializer属性来分配我的解串器,并且更喜欢以编程方式执行此操作以进行编译时检查。 我意识到创建我自己的KafkaListenerContainerFactory允许我在工厂上设置这个属性,但我想避免样板和一些关于获取 SSL 设置的额外复杂性。

有没有一种简单的方法可以在不创建我自己的KafkaListenerContainerFactory情况下以编程方式设置我的值反序列化器?

反序列化器使用用于创建消费者工厂的属性,而不是容器工厂,您可以按如下方式覆盖引导的消费者工厂:

@Bean
public ConsumerFactory<?, ?> kafkaConsumerFactory(KafkaProperties properties) {
    Map<String, Object> props = properties.buildConsumerProperties();
    props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, MyDeserializer.class);
    return new DefaultKafkaConsumerFactory<>(props);
}

根据文档

您可以设置其他属性,如下所示:

@KafkaListener(topics = "test-transactional",
               properties={"foo:bar","isolation.level:read_committed"})
public void listen(ConsumerRecord<?, ?> cr) throws Exception {
    logger.info("got consumer record" + cr.toString());
}


@KafkaListener(topics = "test-transactional",        
                         properties={"isolation.level:read_uncommitted"})
public void listenDifferent(ConsumerRecord<?, ?> cr) throws Exception {
    logger.info("uncomitted: got consumer record" + cr.toString());
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM