spring-boot - 在没有提供恢复方法时达到 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 服务调用没有有效的恢复。(没有可用的冗余服务)
解决方案
如果没有恢复器,则抛出最终异常。
如果调用的来源是一个监听器容器(例如 RabbitMQ、JMS),那么将重试传递。
这就是恢复者的全部意义所在。
推荐阅读
- c# - 如何优化我的 LINQ 查询?
- wordpress - url中的Wordpress CPT多个类别
- javascript - 如何将通过 JavaScript 函数下载的文件数据分配给保存的文件
- ios - 谁将参数传递给了编译处理程序闭包的参数?
- java - 将图像视图从活动中动画化,并从底部将片段带入活动:Android
- spring-cloud - 没有 Eureka 的涡轮仪表板指标
- matlab - 如何使用 MATLAB 在图中绘制所有节点
- wordpress - 我在 woocommerce 设置中找不到结帐选项卡
- jquery - 使用 jquery 搜索具有非拉丁字符的过滤器功能
- c++ - 无法为整数获得适当的输入验证