退避策略简介

在开发过程中我们经常会遇到调用接口失败的情况。遇到这种情况,我们有时候需要重试机制,常用的重试(退避)策略有:

固定的时间间隔重试一次,最多重试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接口的实现。

参考

java调用接口失败重调_接口调用失败的退避策略相关推荐

  1. java调用接口失败重调_java 接口调用问题

    使用fastjson,jackjson等工具也是可能很简单解决这问题 下面是我的做法,如果大家觉得不好请评论一下. 建一个Batch类,里面有字段batchNo,List detail; public ...

  2. python接口自动化面试题_接口自动化面试题,建议收藏!

    1.get和post的区别? l http是上层请求协议,主要定义了服务端和客户端的交互规格,底层都是tcp/ip协议 l Get会把参数附在url之后,用?分割,&连接不同参数,Get获取资 ...

  3. 计算机接口电路的种类,接口电路的分类_接口电路的功能_接口电路的作用是什么...

    描述 接口电路:计算机之间,计算机与外围设备之间,计算机内部部件之间起连接作用的逻辑电路.接口电路是CPU与外部设备进行信息交互的桥梁. 输入.输出接口电路也称为 I/O 电路(INPUT/Outpu ...

  4. java调用接口失败重调_Java调用WebService接口的常见错误

    1.如果出现这个错误:java.lang.NoClassDefFoundError: javax/xml/soap/SOAPException,原因是没有导入 axis2-saaj.jar包 2.如果 ...

  5. java 中查询余额怎么写_如何调用中国移动余额查询的接口 用java 求大神指点一下。...

    苏别v 2016/02/01 11:06 余额查询记录 ----------------------------请求--------------------------------- {SERIAL_ ...

  6. java语言中修饰一个常量_接口中定义一个常量所用的修饰符有: (5.0分)_学小易找答案...

    [判断题]Java中的接口不允许被继承 (5.0分) [单选题]下列程序的输出结果是( ) public class Ex_36{ public static void main(String arg ...

  7. 接口是java面向对象的实现机制之一_接口是java面向对象的实现机制之一,以下说法正确的是()...

    摘要: 接口机制皮肤外的断针段在处理.南方干栏筑的目的点建式特是(,向对象的下说震美观防潮防虫.防蛇D..法正日重点照.建筑阳光北方保暖等因是在素考虑.... 接口机制皮肤外的断针段在处理. 血压,实 ...

  8. 调用接口登录禅道_请教调用API新增禅道用户

    原帖由 石洋洋 于 2019-12-12 09:25:59 发表 调用例子: PATH_INFO方式 1.访问 http://x.com/api-getsessionid.json获取禅道sessio ...

  9. java字符串压缩js解压_接口实现后台GZIP压缩,pako.js 前端解压

    import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOExceptio ...

最新文章

  1. Mybatis 中$与#的区别
  2. maven添加oracle jdbc依赖
  3. 查看mysql,apache,php,nginx编译参数
  4. go git 安装配置与使用 (windows 7 64bit)
  5. Linux CentOS 6.x设置静态IP(亲测有效)
  6. spring 配置jdbc/hibernate/jpa
  7. hexo博客完整备份
  8. 如何找到Windows 7或8家庭组密码?
  9. oracle exception 循环,Oracle Exception In Loop
  10. 使用原生Java代码生成可执行Jar包
  11. Laravel5.3之Container源码解析
  12. UDK2017下载及编译
  13. 豆丁网文档免登陆免积分下载工具原理分析
  14. 十六进制 转 二进制方法汇总
  15. c语言 switch案例,c语言switch case语句使用例子
  16. 分布式系统的阿喀琉斯之踵:数据一致性!
  17. jQuery停止动画——stop()方法的使用
  18. 不同分子量的PEG衍生物试剂,DSPE-PEG6-Mal
  19. 【.Net实用方法总结】 整理并总结System.IO中MemoryStream类及其方法介绍
  20. 由于wps没有卸载干净导致office总是加载配置问题的解决方法

热门文章

  1. 笔记(一):Maven+SSM之HelloSpring
  2. 21英里法则_解决连续交付的最后一英里问题
  3. ansible角色案例
  4. 高并发MINA框架,网络编程(SOCKET)实现,简单的网络聊天DEMO
  5. 书评--资料仓储理论与实务
  6. Apache Mina:一个简单的tcp通信demo
  7. 【数字信号处理】信号处理中为什么要用复信号
  8. PTA - 鸿鸿哥的苹果树
  9. 计算机网络与python知识点总结
  10. 神州今年卖150万台