是否有一种方法可以像其他侦听器属性一样使用spring boot application.properties文件来设置属性ackOnError = false:
spring.kafka.listener.ack-mode
spring.kafka.listener.ack-count
spring.kafka.listener.ack-time
spring.kafka.listener.poll-timeout
?
如果不可能的话,我该如何结合:文件+ Java配置中的属性?我不想像这样在java-config中设置所有kafka属性:
@Bean
public Map<String, Object> consumerConfigs() {
Map<String, Object> props = new HashMap<>();
......
props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, JsonDeserializer.class);
return props;
}
我只想覆盖ackOnError属性。 预先谢谢你。
答案 0 :(得分:2)
它不能作为属性使用,但是您可以按如下所示覆盖Boot的容器工厂@Bean
...
@Bean
ConcurrentKafkaListenerContainerFactory<?, ?> kafkaListenerContainerFactory(
ConcurrentKafkaListenerContainerFactoryConfigurer configurer,
ConsumerFactory<Object, Object> kafkaConsumerFactory) {
ConcurrentKafkaListenerContainerFactory<Object, Object> factory = new ConcurrentKafkaListenerContainerFactory<>();
configurer.configure(factory, kafkaConsumerFactory);
factory.getContainerProperties().setAckOnError(false);
return factory;
}
这还将应用所有其他启动属性。
但是,除非您也停止容器(例如,使用ContainerStoppingErrorHandler
),否则此设置没有太大用处。
这是因为无论如何,下一个成功的记录都将提交其偏移量,该偏移量超出了失败记录的偏移量。
也就是说,在2.3中,默认情况下为false
。