常见的业务代码重试逻辑分析整理

常见的流程如下:

目前遇到的大多数情况是按照这个流程执行的。。

那么,我们要怎么样去封装会比较舒服呢。。我是用JAVA的,接下来的示例为java代码。。

这里先抛出两个类:Timer ,TimerTask,一个方法:schedule(..)。相信大家看名字都知道是干嘛的。

  1. 先封装我们的业务处理
 /**
     * 一般为IO处理
     *
     * @param param1
     * @param param2
     * @return
     */
    public boolean ioMethod(int param1, String param2) {
        if ("111".equals(param2 + param1)) {
            return false;
        }
        return true;
    }

   2. 封装我们的TimeTask:

/**
     * 创建业务处理的任务
     *
     * @param param1
     * @param param2
     * @return
     */
    public TimerTask buildBusinessTimerTask(int num, int param1, String param2) {
        return new TimerTask() {
            @Override
            public void run() {
                //TODO 业务处理

                boolean result = ioMethod(param1, param2);

                if (!result) { //失败重试
                    doSchedule(num, param1, param2);
                    return;
                }
                //TODO 成功处理

            }
        };
    }

...完整的代码:

import java.util.Timer;
import java.util.TimerTask;

/**
 * @author: KEN
 * @since: 2019-09-27
 **/
public class TestTimerTask {

    /**
     * 一般为IO处理
     *
     * @param param1
     * @param param2
     * @return
     */
    public boolean ioMethod(int param1, String param2) {
        if ("111".equals(param2 + param1)) {
            return false;
        }
        return true;
    }

    /**
     * 创建业务处理的任务
     *
     * @param param1
     * @param param2
     * @return
     */
    public TimerTask buildBusinessTimerTask(int num, int param1, String param2) {
        return new TimerTask() {
            @Override
            public void run() {
                //TODO 业务处理

                boolean result = ioMethod(param1, param2);

                if (!result) { //失败重试
                    doSchedule(num, param1, param2);
                    return;
                }
                //TODO 成功处理

            }
        };
    }


    /**
     * 暴露给外界调用的功能方法:处理xxx逻辑
     *
     * @param parm1
     * @param param2
     * @return
     */
    public void doSchedule(int num, int parm1, String param2) {
        System.out.println("第" + (num + 1) + "次执行任务失败");

        if (num > 5) { //大于自定义的阀值,则停止
            //TODO 做记录
            return;
        }

        Timer timer = new Timer();

        TimerTask timerTask = buildBusinessTimerTask(num + 1, parm1, param2);

        //10秒后重试
        timer.schedule(timerTask, 10 * 1000); //自定义一个延时时间
    }

    /**
     * 暴露给外界调用的功能方法:处理xxx逻辑
     *
     * @param parm1
     * @param param2
     * @return
     */
    public boolean doBusinessTimer(int parm1, String param2) {

        TimerTask timerTask = buildBusinessTimerTask(0, parm1, param2);

        timerTask.run();

        return true;
    }


}

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值