模式如何工作

如果消息处理失败,消息将以带有回退时间戳的方式转发到重试主题。重试主题的消费者随后会检查时间戳,如果未到期,则暂停该主题分区的消费。当到期时,分区消费恢复,消息再次被消费。如果消息处理再次失败,消息将被转发到下一个重试主题,重复该模式,直到成功处理,或者尝试次数耗尽,然后消息被发送到死信主题(如果已配置)。

例如,如果您有一个名为“main-topic”的主题,并希望设置非阻塞重试,指数回退时间为1000毫秒,乘数为2,最大尝试次数为4,它将创建main-topic-retry-1000、main-topic-retry-2000、main-topic-retry-4000和main-topic-dlt主题,并配置相应的消费者。该框架还负责创建主题以及设置和配置监听器。

使用此策略将失去该主题的 Kafka 排序保证。
您可以设置您喜欢的 AckMode 模式,但建议使用 RECORD

当使用手动 AckModeasyncAcks 设置为 true 时,DefaultErrorHandler 必须配置 seekAfterErrorfalse。从版本 2.9.10、3.0.8 开始,对于此类配置,这将无条件地设置为 false。在早期版本中,需要重写 RetryTopicConfigurationSupport.configureCustomizers() 方法以将此属性设置为 false

@Override
protected void configureCustomizers(CustomizersConfigurer customizersConfigurer) {
    customizersConfigurer.customizeErrorHandler(eh -> eh.setSeekAfterError(false));
}

此外,在这些版本之前,无论 asyncAcks 属性如何,使用默认(日志记录)DLT 处理程序都与任何类型的手动 AckMode 不兼容。

© . This site is unofficial and not affiliated with VMware.