对于最新的稳定版本,请使用 Spring for Apache Kafka 3.2.1Spring中文文档

对于最新的稳定版本,请使用 Spring for Apache Kafka 3.2.1Spring中文文档

从 2.8.4 开始,您可以将框架配置为同时使用阻塞和非阻塞重试。 例如,您可以有一组例外,这些异常也可能在下一条记录上触发错误,例如 ,因此您可以在将同一记录发送到重试主题之前重试几次,或者直接发送到 DLT。DatabaseAccessExceptionSpring中文文档

若要配置阻塞重试,请重写扩展类中的方法,并添加要重试的异常以及要使用的异常。 默认值为无延迟和 9 次尝试。 有关详细信息,请参阅配置全局设置和功能configureBlockingRetries@ConfigurationRetryTopicConfigurationSupportBackOffBackOffFixedBackOffSpring中文文档

@Override
protected void configureBlockingRetries(BlockingRetriesConfigurer blockingRetries) {
    blockingRetries
            .retryOn(MyBlockingRetryException.class, MyOtherBlockingRetryException.class)
            .backOff(new FixedBackOff(3_000, 5));
}
结合全局可重试主题的致命异常分类,您可以为所需的任何行为配置框架,例如让某些异常同时触发阻塞和非阻塞重试,仅触发一种或另一种,或者直接转到 DLT,而无需进行任何形式的重试。
结合全局可重试主题的致命异常分类,您可以为所需的任何行为配置框架,例如让某些异常同时触发阻塞和非阻塞重试,仅触发一种或另一种,或者直接转到 DLT,而无需进行任何形式的重试。

下面是两种配置协同工作的示例:Spring中文文档

@Override
protected void configureBlockingRetries(BlockingRetriesConfigurer blockingRetries) {
    blockingRetries
            .retryOn(ShouldRetryOnlyBlockingException.class, ShouldRetryViaBothException.class)
            .backOff(new FixedBackOff(50, 3));
}

@Override
protected void manageNonBlockingFatalExceptions(List<Class<? extends Throwable>> nonBlockingFatalExceptions) {
    nonBlockingFatalExceptions.add(ShouldSkipBothRetriesException.class);
}

在此示例中:Spring中文文档

  • ShouldRetryOnlyBlockingException.class将仅通过阻止重试,如果所有重试都失败,则将直接进入 DLT。Spring中文文档

  • ShouldRetryViaBothException.class将通过阻塞重试,如果所有阻塞重试都失败,则将转发到下一个重试主题以进行另一组尝试。Spring中文文档

  • ShouldSkipBothRetriesException.class永远不会以任何方式重试,如果第一次处理尝试失败,将直接进入 DLT。Spring中文文档

请注意,阻塞重试行为是允许列表 - 您添加要以这种方式重试的异常;而非阻塞重试分类是针对致命异常的,因此是拒绝列表 - 您添加的异常不想执行非阻塞重试,而是直接发送到 DLT。
请注意,阻塞重试行为是允许列表 - 您添加要以这种方式重试的异常;而非阻塞重试分类是针对致命异常的,因此是拒绝列表 - 您添加的异常不想执行非阻塞重试,而是直接发送到 DLT。
非阻塞异常分类行为还取决于特定主题的配置。
非阻塞异常分类行为还取决于特定主题的配置。