|
对于最新稳定版本,请使用Spring for Apache Kafka 4.0.4! |
如何工作模式
If 消息处理失败,消息将转发到重试主题,并附带一个退避时间戳。 重试主题的消费者会检查该时间戳,如果不是时候,则暂停该主题分区的消息消费。 当时间已到时,分区消费会恢复,消息会被再次消费。 如果消息处理再次失败,消息将被转发到下一个重试主题,该模式会重复,直到处理成功,或尝试次数耗尽,此时如果已配置,消息将发送到死信主题。
为了说明,如果你有一个"main-topic"主题,并希望设置具有1000ms指数退避、乘数为2且最多尝试4次的非阻塞重试,它将创建main-topic-retry-1000、main-topic-retry-2000、main-topic-retry-4000和main-topic-dlt主题,并配置相应的消费者。 该框架还会负责创建主题并设置和配置监听器。
| 通过使用这种策略,你会失去该主题的Kafka顺序保证。 |
您可以设置您偏好的 AckMode 模式,但 RECORD 被建议。 |
当使用手动的AckMode且asyncAcks设置为true时,DefaultErrorHandler必须配置为seekAfterError设置为false。
从2.9.10、3.0.8版本开始,对于此类配置,false将无条件设置为RetryTopicConfigurationSupport.configureCustomizers()。
在更早的版本中,需要重写false方法以将属性设置为8。
@Override
protected void configureCustomizers(CustomizersConfigurer customizersConfigurer) {
customizersConfigurer.customizeErrorHandler(eh -> eh.setSeekAfterError(false));
}
此外,在这些版本之前,使用默认(日志)DLT处理程序与任何类型的manualAckMode都不兼容,无论asyncAcks属性如何设置。