加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

Spring中的重试机制

发布时间:2021-04-09 12:27:25 所属栏目:外闻 来源:互联网
导读:bleRetry - 表示开启重试机制 @Retryable - 表示这个方法需要重试,它有很丰富的参数,可以满足你对重试的需求 @Backoff - 表示重试中的退避策略 @Recover - 兜底方法,即多次重试后还是失败就会执行这个方法 Spring-Retry 的功能丰富在于其重试策略和退避策

bleRetry - 表示开启重试机制

@Retryable - 表示这个方法需要重试,它有很丰富的参数,可以满足你对重试的需求

@Backoff - 表示重试中的退避策略

@Recover - 兜底方法,即多次重试后还是失败就会执行这个方法

Spring-Retry 的功能丰富在于其重试策略和退避策略,还有兜底,监听器等操作。

然后每个注解里面的参数,都是很简单的,大家看一下就知道是什么意思,怎么用了,我就不多讲了。关注公众号Java技术栈,在后台回复:spring,可以获取我整理的 Spring 系列教程,非常齐全。

重试策略

看一下Spring Retry自带的一些重试策略,主要是用来判断当方法调用异常时是否需要重试。(下文原理部分会深入分析实现)

  • FixedBackOffPolicy 默认固定延迟1秒后执行下一次重试
  •  ExponentialBackOffPolicy 指数递增延迟执行重试,默认初始0.1秒,系数是2,那么下次延迟0.2秒,再下次就是延迟0.4秒,如此类推,最大30秒。
  •  ExponentialRandomBackOffPolicy 在上面那个策略上增加随机性
  •  UniformRandomBackOffPolicy 这个跟上面的区别就是,上面的延迟会不停递增,这个只会在固定的区间随机
  •  StatelessBackOffPolicy 这个说明是无状态的,所谓无状态就是对上次的退避无感知,从它下面的子类也能看出来

原理

原理部分我想分开两部分来讲,一是重试机制的切入点,即它是如何使得你的代码实现重试功能的;二是重试机制的详细,包括重试的逻辑以及重试策略和退避策略的实现。另外,关注公众号Java技术栈,在后台回复:面试,可以获取我整理的 Spring 系列面试题和答案,非常齐全。

切入点主要核心重试逻辑就是上面的代码了,看上去还是挺简单的。

在上面,我们漏掉了RetryPolicy的canRetry方法和BackOffPolicy的backOff方法,以及这两个Policy是怎么来的。我们回头看看getStatelessInterceptor方法中的getRetryPolicy和getRetryPolicy方法。

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读