接口调用失败的退避策略
接口 调用 策略 失败
2023-09-14 08:57:31 时间
退避策略简介
在开发过程中我们经常会遇到调用接口失败的情况。遇到这种情况,我们有时候需要重试机制,常用的重试(退避)策略有:
- 固定的时间间隔重试一次,最多重试N次:比如我现在一个接口调用失败了,不是立马返回失败,而是hold住线程,每隔2秒重新调下接口,最多调5次,只要其中一次成功了就直接返回。如果5次都没成功,接口返回失败。
- 指数时间间隔尝试策略:和上面策略一样,接口调用失败后也不是直接返回,但是重试的时间间隔呈指数增加。比如第一次时间间隔是2s,第二次次4s,依次增加。当然你也可以设置最大的尝试次数和最大的尝试时间。
Spring中的退避策略工具类
FixedBackOff
FixedBackOff
是Spring
自带的支持固定时间退避策略的工具类。这个类使用起来非常简单:
long interval = 1000; //重试间隔 1s重试一次
long maxAttempts = 10; //最大重试次数 最多重试10次
BackOff backOff = new FixedBackOff(interval, maxAttempts);
BackOffExecution execution = backOff.start();
while(true){
long value = execution.nextBackOff();
if(value == BackOffExecution.STOP){
break;
}else{
//在这里写你的重试逻辑
}
}
ExponentialBackOff
ExponentialBackOff
是支持尝试间隔呈指数增加的工具类,使用方式和上面类似:
long initialInterval = 100; //初始间隔
double multiplier = 2.0; //递增倍数
long maxInterval = 5 * 1000L; //最大间隔
long maxElapsedTime = 50 * 1000L; //累计最大的时间间隔
ExponentialBackOff backOff = new ExponentialBackOff(initialInterval, multiplier);
backOff.setMaxInterval(maxInterval);
backOff.setMaxElapsedTime(maxElapsedTime);
BackOffExecution execution = backOff.start();
while(true){
long value = execution.nextBackOff();
if(value == BackOffExecution.STOP){
break;
}else{
//在这里写你的重试逻辑
}
}
自定义退避策略
如果你想要实现自己的退避策略,也非常简单。参考上面两个类中对于BackOffExecution
接口的实现。
参考
相关文章
- 使用Loadrunner 调用Webservice接口测试优化总结
- 【IoT平台北向API调用】使用Postman调用Https接口
- 微服务接口设计原则
- jmeter接口测试-调用java的jar包-csv参数化请求-BeanShellPreProcessor生成验签作为请求验证参数-中文乱码----实战
- java接口中多继承的问题
- EasyNVR RTSP转RTMP-HLS流媒体服务器前端构建之_关于接口调用常见的一些问题(401 Unauthorized)
- Qt音视频开发16-mpv通用接口
- 用 ABAP 调用 OCR 接口实现出租车发票扫描
- C# 接口作用的深入理解
- C# 接口、抽象类
- Atitit 小程序后端服务api艾提拉总结 目录 1. 服务端1 1.1. 开放接口1 1.1.1. 登录1 1.1.2. 用户信息1 1.1.3. 接口调用凭证2 1.1.4. 数据分
- Atitit 通过调用gui接口杀掉360杀毒 360卫士 qq保镖等难以结束的进程(javac# php )
- 【WebService笔记01】使用JWS实现WebService接口的发布和调用
- Flutter 年龄输入框界面点击保存调用接口返回
- 【SpringBoot18】SpringBoot 调用外部接口的三种方式
- android 11.0 添加自定义系统服务接口给app调用
- 【Go进阶】解析接口调用
- 技术实践丨如何解决异步接口请求快慢不均导致的数据错误问题?
- SpringBoot中调用第三方接口的三种方式
- 似乎只需要在cpp文件 #include<opencv2opencv.hpp> 就可以调用opencv里面所有的函数或者说函数接口了?
- PHP:APP接口开发
- java 接口和抽象类的一个最大的区别
- 转换Arcgis Server REST接口实现OL2直接调用
- Linux系统调用及用户编程接口(API)
- pytest接口自动化测试框架 | 集成Allure测试报告
- 从0.1开始接口自动化的一点实践
- 接口测试系列之——接口安全测试
- 接口性能优化
- C++ 接口(抽象类)
- (02)Cartographer源码无死角解析-(35) PoseExtrapolator→接口解剖,学会框架分析与架构设计
- vue中Axios的封装和API接口的管理
- 多次负载均衡之后,WebService接口调用地址,和实际调用的接口地址不一致问题记录
- Postman接口调用(强烈推荐)
- 关于海康官网接口文档中:取流URL有效时间为5分钟表述歧义的说明
- java学习笔记——接口多态的综合案例
- Autosar-Interface接口