我需要使用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));
}
};
}
答案 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);
}