¿Hay una manera de establecer la propiedad ackOnError = false utilizar inicio de primavera Application.properties archivo al igual que otras propiedades de la escucha, tales como:
spring.kafka.listener.ack-mode
spring.kafka.listener.ack-count
spring.kafka.listener.ack-time
spring.kafka.listener.poll-timeout
?
Si no es posible, ¿cómo combino gato: propiedades de archivo de java + config? No quiero para establecer todas las propiedades kafka en java-config de esta manera:
@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;
}
Sólo quiero anular ackOnError propiedad. Gracias de antemano.
No está disponible como una propiedad, pero se puede anular fábrica de envases de arranque @Bean
de la siguiente manera ...
@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;
}
Esto se aplicará todas las otras propiedades de arranque también.
Sin embargo, este ajuste no tiene mucha utilidad a menos que también deja el recipiente (por ejemplo, con una ContainerStoppingErrorHandler
).
Esto se debe a que el siguiente registro exitoso tendrá su desplazamiento cometido todos modos, lo que está más allá de la compensación del registro fallido.
Dicho esto, en el apartado 2.3, será false
por defecto.