0

I am using spring-cloud-stream-binder-kafka and have implemented stateful retry using DefaultErrorHandler, I want to register different DefaultErrorHandler for different consumer consuming messages from different Kafka topics, and each DefaultErrorHandler will be pushing messages to dlq on recovery based on spring.cloud.stream.kafka.bindings.channel-in-0.consumer.dlqName configuration.

Now when I register a DefaultErrorHandler using ListenerContainerCustomizer I want to access KafkaConsumerProperties for the current input-channel and retrieve dlq name from it and use it in DefaultErrorHandler, so if I can get input-channel name I can get the consumer properties like

@Bean
  public ListenerContainerCustomizer<AbstractMessageListenerContainer> containerCustomizer() {
    return (container, dest, group) -> {

        KafkaConsumerProperties kafkaConsumerProperties = kafkaExtendedBindingProperties.getExtendedConsumerProperties("channel");
        String dlqName = kafkaConsumerProperties.getDlqName();
        DeadLetterPublishingRecoverer recoverer =
        new DeadLetterPublishingRecoverer(template, (rec, ex) -> new TopicPartition(dlqName, -1));
        container.setCommonErrorHandler(new DefaultErrorHandler(recoverer,new FixedBackOff(2000L, 5L)));

    };
  }
Chintan Radia
  • 236
  • 2
  • 9

0 Answers0