本篇内容主要讲解“SpringBoot怎么实现接口请求重试机制”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot怎么实现接口请求重试机制”吧!
<编辑类="目录">目录编辑>- <李>
一、重试机制
李> <李>二、重试机制要素
李> <李>三、重试机制注意事项
李> <李>四,SpringBoot整合spring-retry
李>- <李>
1)添加依赖
李> <李>2)添加@EnableRetry注解
李> <李>3)添加@Retryable注解
李> <李>4)控制器测试代码
李> <李>5)发送请求
李> <李>6)补充:@Recover
李>一、重试机制
由于网络不稳定或网络抖动经常会造成接口请求失败的情况,当我们再去尝试就成功了,这就是重试机制。
其主要目的就是要尽可能地提高请求成功的概率,但一般情况下,我们请求第一次失败,代码运行就抛出异常结束了,如果想再次请求可能还需要手工操作,这非常地不方便,可行性也不佳,因此,春天框架提供了对重试机制支持,并且在春云中可以与Hystrix结合使用,可以避免访问到已经不正常的实例。
二、重试机制要素
重试机制要素如下:
- <李>
限制重试次数
李> <李>每次重试的时间间隔
李> <李>最终失败结果的报警或事物回滚
李> <李>在特定失败异常事件情况下选择重试
李>三、重试机制注意事项
对于非幂等性的方法我们要慎用重试机制,可能会造成意料之外的后果。
所谓幂等性:就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。
四,SpringBoot整合spring-retry
下面我们就来看下,我们应该如何使用SpringBoot来整合spring-retry组件实现重试机制。
1)添加依赖
首先我们在SpringBoot项目中的<代码>砰的一声。xml> 代码添加相关依赖,如下:
& lt; !——,重试相关依赖包,——比; & lt; dependency> ,,,& lt; groupId> org.springframework.retry ,,,& lt; artifactId> spring-retry ,,,& lt; version> 1.2.4.RELEASE & lt;/dependency> , & lt; dependency> ,,,& lt; groupId> org.aspectj ,,,& lt; artifactId> aspectjweaver ,,,& lt; version> 1.9.4 & lt;/dependency>
2)添加@EnableRetry注解
在主启动类应用上添加@EnableRetry注解,实现对重试机制的支持
@SpringBootApplication @EnableRetry public class  RetryApplication { , ,,,public static void main (String [], args), { , ,,,,,,,SpringApplication.run (RetryApplication.class, args); ,,,} , }
注意:@EnableRetry也可以使用在配置类,ServiceImpl类,方法上
3)添加@Retryable注解
我们针对需要实现重试的方法上添加<代码> @Retryable 代码>注解,使该方法可以实现重试,这里我列出ServiceImpl中的一个方法:
@ service public class  RetryServiceImpl implements RetryService  { , ,,,@Retryable (=value Exception.class,, maxAttempts =, 3, backoff =, @Backoff (=delay 2000年,multiplier =, 1.5)) ,,,public String testRetry (), throws Exception { , ,,,,,,,System.out.println(“开始执行代码:“+,LocalTime.now ()); ,,,,,,,int code =, 0; ,,,,,,,//,模拟一直失败 ,,,,,,,如果(==code 0) { ,,,,,,,,,,//,这里可以使自定义异常,@Retryable中值需与其一致 ,,,,,,,,,,,throw new 例外(“代码执行异常“); ,,,,,,,} ,,,,,,,System.out.println(“代码执行成功“); ,,,,,,,return “success"; ,,,} }
说明:@Retryable配置元数据情况:
值:针对指定抛出的异常类型,进行重试,这里指定的是异常
maxAttempts:配置最大重试次数,这里配置为3次(包含第一次和最后一次)
延迟:第一次重试延迟间隔,这里配置的是2 s
乘数:每次重试时间间隔是前一次几倍,这里是1.5倍
4)控制器测试代码
@RestController @RequestMapping (“/test") public class  TestController { ,,@ autowired ,,,private RetryService retryService; , ,,,@GetMapping (“/retry") ,,,public String testRetry (), throws Exception { ,,,,,,,return retryService.testRetry (); ,,,} }SpringBoot怎么实现接口请求重试机制