Spring Kafka重试日志记录

时间:2018-08-02 01:44:20

标签: spring-kafka spring-retry

我需要使用kafka主题进行消费,做一些记录工作并使用spring-kafka 2.1.7生成另一个主题。其他需求仅是语义,重试和错误处理的事务处理。一条记录,我应该进行3次重试,记录每个重试消息,以重试主题,如果所有重试均失败,则将记录发送到无效信函主题。我查看了https://github.com/spring-projects/spring-kafka/issues/575,其中包含解决问题的详细信息。我正在努力的事情是如何记录每个重试消息的详细信息,例如消费者偏移量,尝试提交的主题等。是否有办法从重试回调中获取这些消息?下面的retrylistener代码段已向org.springframework.kafka.listener.LoggingErrorHandler注册,该容器已设置为ConcurrentKafkaListenerContainerFactory的容器属性?

         @Bean
         public RetryListener retryListener(KafkaTemplate<String,SpecificRecord> kafkaTemplate) {
             return new RetryListenerSupport() {

                public void onError(RetryContext context, RetryCallback callback, Throwable throwable) {
                    int retryCount =context.getRetryCount();
                    kafkaTemplate) .send(new ProducerRecord<String,SpecificRecord>("topic_name",record));
                }
             };
         }

1 个答案:

答案 0 :(得分:0)

RetryContext中填充了RetryingMessageListenerAdapter

context.setAttribute(CONTEXT_RECORD, record);
switch (RetryingMessageListenerAdapter.this.delegateType) {
    case ACKNOWLEDGING_CONSUMER_AWARE:
        context.setAttribute(CONTEXT_ACKNOWLEDGMENT, acknowledgment);
        context.setAttribute(CONTEXT_CONSUMER, consumer);
        RetryingMessageListenerAdapter.this.delegate.onMessage(record, acknowledgment, consumer);
        break;
    case ACKNOWLEDGING:
        context.setAttribute(CONTEXT_ACKNOWLEDGMENT, acknowledgment);
        RetryingMessageListenerAdapter.this.delegate.onMessage(record, acknowledgment);
        break;
    case CONSUMER_AWARE:
        context.setAttribute(CONTEXT_CONSUMER, consumer);
        RetryingMessageListenerAdapter.this.delegate.onMessage(record, consumer);
        break;
    case SIMPLE:
        RetryingMessageListenerAdapter.this.delegate.onMessage(record);
}
相关问题