Spring的Retry重试机制

当我们调用一个接口时,可能由于网络等原因造成一次失败,再去尝试就成功了,这就是重试机制。重试机制的解决方案有很多比如try-catch-redo简单重试模式,但使用这种重试机制有一个问题就是:正常逻辑和重试机制耦合度较高。基于这个些问题,spring-retry规范了了正常逻辑和重试逻辑,将正常逻辑和重试逻辑解耦。spring-retry是一个开源工具包,该工具把重试操作模板定制化,可以设置重试策略和回退策略。同时,重试执行实例保证线程安全。spring-retry重试可以用Java代码实现也可以用注解@Retryable方式实现,这里spring-retry提倡以注解的方式对方法进行重试。

spring-retry的使用:

1.在pom文件中引入以下依赖

		
			org.springframework.retry
			spring-retry
		
		
		
			org.aspectj
			aspectjweaver
		

2.springboot中开启retry重试

//开启retry重试机制
@EnableRetry
@SpringBootApplication
public class HJBApplication {

	public static void main(String[] args) {
		SpringApplication.run(HJBApplication.class, args);
	}
}

3.编写测试方法

    @GetMapping(value = "retry")
    @Retryable(value = {SysException.class},maxAttempts = 4, backoff = @Backoff(delay = 1000,multiplier = 1))
    public RtResult retry() {
		log.info("测试重试机制");
		throw new SysException("异常");
    }

访问localhost/retry方法控制台就会出现,最后再抛出异常

2018-09-17 11:57:49.707  INFO 1092 --- [p-nio-80-exec-9] c.r.mobile.controller.LogRegController   : 测试重试机制
2018-09-17 11:57:50.709  INFO 1092 --- [p-nio-80-exec-9] c.r.mobile.controller.LogRegController   : 测试重试机制
2018-09-17 11:57:51.710  INFO 1092 --- [p-nio-80-exec-9] c.r.mobile.controller.LogRegController   : 测试重试机制
2018-09-17 11:57:52.711  INFO 1092 --- [p-nio-80-exec-9] c.r.mobile.controller.LogRegController   : 测试重试机制

代码解释:

@Retryable:value属性表示出现那些异常会触发重试机制,maxAttempts表示最大重试此时,默认是三次,delay表示重试的延迟时间,multiplier表示上一次延时时间是这一次的的倍数

你可能感兴趣的:(springboot技术总结)