SeekToCurrentErrorHandler如何配置仅指定异常可重试其余全部不重试
可以实现,通过SeekToCurrentErrorHandler内置的异常分类配置即可快速实现该需求,不需要额外自定义复杂逻辑。
具体配置步骤
- 构造异常分类映射表,key为异常类,value为
true表示对应异常允许重试,false表示不可重试 - 实例化
SeekToCurrentErrorHandler时传入该映射表,同时将默认匹配规则设为false,即所有未匹配到的异常默认不可重试
代码示例
import org.springframework.kafka.listener.SeekToCurrentErrorHandler; import org.springframework.util.backoff.FixedBackOff; import java.util.HashMap; import java.util.Map; // 构造异常分类规则 Map<Class<? extends Throwable>, Boolean> retryRules = new HashMap<>(); // 仅将需要支持重试的X'、Y'、Z'类异常加入规则,设为true表示可重试 retryRules.put(XException.class, true); retryRules.put(YException.class, true); retryRules.put(ZException.class, true); // 实例化错误处理器 SeekToCurrentErrorHandler errorHandler = new SeekToCurrentErrorHandler( // 按需配置重试间隔和最大重试次数,示例为间隔1秒,最多重试3次 new FixedBackOff(1000L, 3), retryRules, // 核心配置:所有未匹配到规则的异常,默认不可重试 false );
注意事项
- 异常匹配遵循继承规则,若父类被配置为可重试,所有未单独配置的子类异常也会默认判定为可重试
如果你使用的是Spring Kafka 2.8及以上版本,
SeekToCurrentErrorHandler已被标记为废弃,推荐使用DefaultErrorHandler,上述配置逻辑完全通用,仅需替换类名即可。
内容的提问来源于stack exchange,提问作者Guillaume
相关产品推荐
相关产品推荐

