递增重试(一)

项目中有很多地方需要重试,比如说调银行的一个退款功能,调完之后需要我们自己去主动查询银行的退款结果接口,这个时候产品过来跟你说,我想调退款接口之后,先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

发布了165 篇原创文章 · 获赞 103 · 访问量 39万+

猜你喜欢

转载自blog.csdn.net/qq_33101675/article/details/103810384