我正在这里https://docs.spring.io/spring-kafka/docs/2.2.6.RELEASE/reference/html/#retrying-deliveries阅读文档,我无法弄清楚用批处理侦听器实现有状态重试的正确方法是什么
文档说“没有为批处理消息侦听器提供重试适配器,因为该框架不知道失败发生在批处理中的位置”。
这对我的用例来说不是问题,因为我只想重试整个批次。
文档建议我在侦听器内部使用RetryTemplate。好的,我可以做到。
问题出现在下一部分,该部分讨论如何使用有状态重试标志在重试之间进行消费者轮询,以防止代理丢弃我的消费者。
如何配置批处理侦听器来做到这一点?批处理侦听器是否支持有状态重试标志?如果“我的重试”逻辑位于侦听器内部,这是否会阻止轮询? statefulRetry标志到底能做什么?
答案 0 :(得分:1)
否;您不能将regedit.exe
添加到用于批处理侦听器的容器工厂。
java.lang.ClassCastException:org.springframework.kafka.listener.adapter.BatchMessagingMessageListenerAdapter无法转换为org.springframework.kafka.listener.MessageListener
We will clean that up with a more meaningful error.。
随着即将发布的2.3版本(目前将于下周五发布的候选版本)you can add a BackOff
to the SeekToCurrentErrorHandler
,其功能与Set-Culture
类似;在当前版本中,将立即尝试重新交付。
此外,另一个新功能recently merged提供了一种从批处理中的特定索引重试的机制。
答案 1 :(得分:1)
spring kafka的最新版本具有特殊的RetryingBatchErrorHandler。 https://docs.spring.io/spring-kafka/docs/2.4.6.RELEASE/reference/html/#retrying-batch-eh谢谢,春季卡夫卡队!