首页 > 解决方案 > 在没有提供恢复方法时达到 maxAttempts 后 Spring-retry 重新启动

问题描述

使用 spring-boot 1.5.21 使用 spring-retry 并注意到当没有实现恢复方法时达到 maxAttempts 时 spring-retry 会重新启动。

如果实施了正确的恢复方法,则按预期工作。如果没有恢复方法,重试不会在 maxAttempts 处停止,而是再次重新启动。# of restarts 等于配置的 maxAttempts。例如,最大尝试次数 =3,重试将执行 9 次(运行 3 次重试 * 3 次重新启动)

使用注解设置重试块 @Retryable(include= {ResourceAccessException.class}, maxAttemptsExpression = "${retry.maxAttempts}", backoff = @Backoff(delayExpression = "${retry.delay}", multiplierExpression = "${ retry.delay-multiplier}"))

maxAttempts = 3 的预期结果是重试在 3 次尝试后停止实际结果是重试将重新开始 3 次尝试 3 次,总共重试 9 次。

只有在没有提供恢复方法时才会出现上述情况。根据文档,恢复方法是可选的,我不需要一个,因为在我的情况下,对于失败的 REST 服务调用没有有效的恢复。(没有可用的冗余服务)

标签: spring-bootspring-retry

解决方案


如果没有恢复器,则抛出最终异常。

如果调用的来源是一个监听器容器(例如 RabbitMQ、JMS),那么将重试传递。

这就是恢复者的全部意义所在。


推荐阅读