SpringBoot接口或方法进行失败重试的实现方式
作者:会飞的青蛙~
为了防止网络抖动,影响我们核心接口或方法的成功率,通常我们会对核心方法进行失败重试,如果我们自己通过for循环实现,会使代码显得比较臃肿,所以本文给大家介绍了SpringBoot接口或方法进行失败重试的实现方式,需要的朋友可以参考下
1. 前言
为了防止网络抖动,影响我们核心接口或方法的成功率,通常我们会对核心方法进行失败重试,如果我们自己通过for循环实现,会使代码显得比较臃肿
2. Springboot提供了比较优雅的实现方式
第一步:pom中引入spring-retry 因为retry是基于aop实现的 所以这里还需要引入spring aop
<dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
第二步:启动类上开启spiring-retry模块
第三步:在需要失败重试方法上加@Retryable注解
参数
value:可以设置对哪些异常进行失败重试
maxAttempts:设置失败重试的次数
backoff:设置重试等待策略
delay:失败重试时间间隔
multiplier:设置延迟倍数
例如:我们delay设置的是1000 multipler设置的是2当出现异常时,会间隔1秒,2秒,4秒进行重试
第四步:当重试次数耗尽还抛出异常时,我们可以通过@Recover注解进行失败回调
拿到我们的异常值和方法的入参进行额外的处理,
第五步:我们可以看到,重复调用了五次,最后进入了我们的失败调用方法中
注意:
- @Recover方法的返回值,必须与@Retryable方法的返回值一致
- @Recover方法的第一个参数必须是Throwable类型的
- 回调方法与重试方法需要在同一个实现类里面
- 如果同一个类有多个回调方法,我们可以通过@Retryable注解的recover属性,指定回调方法名称
- spring-retry是基于aop实现的,静态方法会导致aop失效 更多aop的失效场景请看下期
到此这篇关于SpringBoot接口或方法进行失败重试的实现方式的文章就介绍到这了,更多相关SpringBoot接口进行失败重试内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!