项目中有很多地方需要重试,比如说调银行的一个退款功能,调完之后需要我们自己去主动查询银行的退款结果接口,这个时候产品过来跟你说,我想调退款接口之后,先10分钟的查,查询几次之后查不到结果就30分钟的查,再然后60分钟。。。
思考一下怎么写呢?
撸码:
public class RetryHandler {
/**
* retry intervals (s)
*/
private static final int[] retryIntervals = {10, 30, 60, 600, 1800, 3600, 7200, 43200};
/**
* get next retry intervals
*
* @param retry
* @return
*/
public static Integer getNextRetryIntervals(int retry) {
if (retry == 0) {
return 1;
}
if (retry >= 21) {
return retryIntervals[retryIntervals.length - 1];
}
int i = (int) Math.floor(retry / 3.0);
return retryIntervals[i];
}
public static void main(String[] args) {
for (int i = 0; i < 30; i++) {
System.out.println("重试第" + i + "次," + getNextRetryIntervals(i) + "s之后");
}
}
}
测试结果为:
这一篇是简易版的递增重试,如果想写出规范的,功能强大灵活,易扩展的重试任务的话,可以看下篇文章
重试任务(二)
然后看到一篇关于重试的文章写的非常不错,推荐给大家,地址为:https://www.cnblogs.com/mfrank/p/11336770.html