异常重试框架Spring Retry

spring retry 官网
https://github.com/spring-projects/spring-retry

环境:springboot maven

1. 引入依赖:

org.springframework.retry

spring-retry

org.aspectj

aspectjweaver

2. 使用注解:@EnableRetry 开启retry功能,该注解可以方在启动类上、或者Service层上都可以。

3. 使用方式:

@Retryable(value = RestClientException.class, maxAttempts = 5,

backoff = @Backoff(delay = 1000L, maxDelay= 86400000L, multiplier = 10))

public void push(String s1, String s2) {

// todo

}

4. @Retryable参数解释:

* @Retryable注解的方法在发生异常时会重试,参数说明: value:当指定异常发生时会进行重试 ,HttpClientErrorException是RestClientException的子类。

* include:和value一样,默认空。如果 exclude也为空时,所有异常都重试

* exclude:指定异常不重试,默认空。如果 include也为空时,所有异常都重试

* maxAttemps:最大重试次数,默认3

* backoff:重试等待策略,默认空

* maxDelay: 单次最大延迟重试时间,单位:毫秒

* @Backoff注解为重试等待的策略,参数说明: delay:指定重试的延时时间,默认为1000毫秒

* multiplier:指定延迟的倍数,比如设置delay=5000,multiplier=2时,第一次重试为5秒后,第二次为10(5×2)秒,第三次为20(10×2)秒。

还有其它的参数,可根据实际情况进行设置

5. 注意的点:

* 因为@Retryable采用的是切面方式,因此方法里面不能捕获且处理异常,一定要抛出一个异常,并且这个异常必须是value对应的异常或者子异常,这样才会被Retry捕获并处理。

* maxDelay一旦设置,那么单次最大延迟重试时间就确认。例如:delay * 5(第5次重试)=5000,而maxDelay被设置为2000,那么本次重试延迟时间将会是2000而不是计算出的5000。

6. 应用场景:

* 网络请求:如需要调用第三方服务,为了避免因网络异常,延迟等造成请求中断,则可以使用重试机制;

* 异常结果重试:如处理某个功能方法,但是本次获取到异常的结果,希望重新获取新的结果,那么可以使用重试机制;

7. 缺陷问题:

* 如果配置有问题,可能导致重试机制失效。

* 因为Retry使用了aspect,自带切面的缺陷,因此不能在同一个类下的两个方法相互调用,否则重试机制会失效。例如:

public class demo {

public void S1() {

S2();

}

@Retryable(Exception.class)

public void S2() {

// 此时S2的重试机制会失效。

throw new RuntimeException(“retry…”);

}

}

* 如果使用了@Recover注解方法,@Retryable指定的异常要和@Recover参数的异常匹配,不然会报找不到Recover方法等错误。

8. 特性功能:

* @Recover:封装在多次重试都失败后你需要执行的业务逻辑(备用方法)

案例:

@Service

class Service {

@Retryable(recover = “service1Recover”, value = RemoteAccessException.class)

public void service1(String str1, String str2) {

// … do something

}

@Recover

public void service1Recover(RemoteAccessException e, String str1, String str2) {

// … error handling making use of original args if required

}

}

内容出处:,

声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。文章链接:http://www.yixao.net/share/23097.html

发表评论

登录后才能评论