spring-retry概念介绍
来源:互联网 发布:中宏数据库 编辑:程序博客网 时间:2024/06/11 03:29
spring-retry简单例子
spring-retry项目实现了重试和熔断功能,目前已用于SpringBatch、Spring Integration等项目。
RetryOperations接口API:
public interface RetryOperations { <T> T execute(RetryCallback<T> retryCallback) throws Exception; <T> T execute(RetryCallback<T> retryCallback, RecoveryCallback<T> recoveryCallback) throws Exception; <T> T execute(RetryCallback<T> retryCallback, RetryState retryState) throws Exception, ExhaustedRetryException; <T> T execute(RetryCallback<T> retryCallback, RecoveryCallback<T> recoveryCallback, RetryState retryState) throws Exception;}通过RetryCallback定义需重试的业务服务,当重试超过最大重试时间或最大重试次数后可以调用RecoveryCallback进行恢复,比如返回假数据或托底数据。
那什么时候需重试?spring-retry是当抛出相关异常后执行重试策略,定义重试策略时需要定义需重试的异常(如因远程调用失败的可以重试、而因入参校对失败不应该重试)。只读操作可以重试,幂等写操作可以重试,但是非幂等写操作不能重试,重试可能导致脏写,或产生重复数据。
重试策略有哪些呢?spring-retry提供了如下重试策略。
RetryPolicy提供了如下策略实现:
NeverRetryPolicy:只允许调用RetryCallback一次,不允许重试;
AlwaysRetryPolicy:允许无限重试,直到成功,此方式逻辑不当会导致死循环;
SimpleRetryPolicy:固定次数重试策略,默认重试最大次数为3次,RetryTemplate默认使用的策略;
TimeoutRetryPolicy:超时时间重试策略,默认超时时间为1秒,在指定的超时时间内允许重试;
CircuitBreakerRetryPolicy:有熔断功能的重试策略,需设置3个参数openTimeout、resetTimeout和delegate,稍后详细介绍该策略;
CompositeRetryPolicy:组合重试策略,有两种组合方式,乐观组合重试策略是指只要有一个策略允许重试即可以,悲观组合重试策略是指只要有一个策略不允许重试即可以,但不管哪种组合方式,组合中的每一个策略都会执行。
BackOffPolicy 提供了如下策略实现:
NoBackOffPolicy:无退避算法策略,即当重试时是立即重试;
FixedBackOffPolicy:固定时间的退避策略,需设置参数sleeper和backOffPeriod,sleeper指定等待策略,默认是Thread.sleep,即线程休眠,backOffPeriod指定休眠时间,默认1秒;
UniformRandomBackOffPolicy:随机时间退避策略,需设置sleeper、minBackOffPeriod和maxBackOffPeriod,该策略在[minBackOffPeriod,maxBackOffPeriod之间取一个随机休眠时间,minBackOffPeriod默认500毫秒,maxBackOffPeriod默认1500毫秒;
ExponentialBackOffPolicy:指数退避策略,需设置参数sleeper、initialInterval、maxInterval和multiplier,initialInterval指定初始休眠时间,默认100毫秒,maxInterval指定最大休眠时间,默认30秒,multiplier指定乘数,即下一次休眠时间为当前休眠时间*multiplier;
ExponentialRandomBackOffPolicy:随机指数退避策略,引入随机乘数,之前说过固定乘数可能会引起很多服务同时重试导致DDos,使用随机休眠时间来避免这种情况。
转载:http://www.sohu.com/a/137536784_494947
- spring-retry概念介绍
- spring-retry
- spring-retry
- spring-boot+spring-retry
- Spring retry基本使用
- Spring Retry中文文档
- Spring Retry实现原理
- Spring retry基本使用
- spring-retry简单使用
- Spring Retry实现原理
- spring-retry简单例子
- Spring重试支持Spring Retry
- Spring重试支持Spring Retry
- Spring 3 AOP 概念介绍
- Spring 3 AOP 概念介绍
- Spring 3 AOP 概念介绍
- springboot(十四)使用spring retry
- springboot(十四)使用spring retry
- HDU5828-Rikka with Sequence
- Mybatis Generator最完整配置详解
- openjudge 冷血格斗场(map)
- P地址,子网掩码,默认网关,DNS服务器详解
- 计算机软件测试小结1
- spring-retry概念介绍
- [初学笔记] matlab中如何解决跑.m文件时,command window能够显示中文
- base64换行问题处理
- Maven实战(三)--Pom.xml详解
- 20170907--学习笔记(Ext.data.Store的基本用法)
- Android---HttpURLConnection
- Server Apache Tomcat v7.0 at localhost failed to start.
- Hive搭建并将元数据存储到MySQL
- APP项目打包