基于asynctool设计的异步任务调度工具

asyncTaskTool

介绍

基于asynctool设计的异步任务调度工具, 新增任务失败重试,子任务超时时间限制,任务停止运行功能;

所有的例子均在test包下

gitee地址:https://gitee.com/xzjsccz/async-task-tool

使用

基于asynctool的功能都已实现,简化任务build模块

WorkerWrapper对比

asynctool构建WorkerWrapper

WorkerWrapper<WorkResult<User>, String> workerWrapper2 =  new WorkerWrapper.Builder<WorkResult<User>, String>()
                .worker(w2)
                .callback(w2)
                .id("third")
                .build();

asyncTaskTool构建WorkerWrapper

 WorkerWrapper<WorkResult<User>, String> workerWrapper2 =  new WorkerWrapper<WorkResult<User>, String>()
                .worker(w2)
                .callback(w2)
                .id("third");
任务重试功能

设置DeWorker1任务运行失败,重试3次

 public User action(String object, Map<String, WorkerWrapper> allWrappers) {
        System.out.println("-----------------");
        System.out.println("获取par0的执行结果: " + allWrappers.get("first").getWorkResult());
        System.out.println("取par0的结果作为自己的入参,并将par0的结果加上一些东西");
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // 任务运行失败
        int a = 10/0;
        User user0 = (User) allWrappers.get("first").getWorkResult().getResult();
        return new User(user0.getName() + " worker1 add");
    }
 WorkerWrapper<String, User> workerWrapper1 = new WorkerWrapper<String, User>()
                .worker(w1)
                .callback(w1)
                .id("second")
                .next(workerWrapper2)
                .retryCount(3);

运行结果

worker0 的结果是:User{name='user0'}
-----------------
获取par0的执行结果: WorkResult{result=User{name='user0'}, resultState=SUCCESS, ex=null}
取par0的结果作为自己的入参,并将par0的结果加上一些东西
-----------------
获取par0的执行结果: WorkResult{result=User{name='user0'}, resultState=SUCCESS, ex=null}
取par0的结果作为自己的入参,并将par0的结果加上一些东西
-----------------
获取par0的执行结果: WorkResult{result=User{name='user0'}, resultState=SUCCESS, ex=null}
取par0的结果作为自己的入参,并将par0的结果加上一些东西
-----------------
获取par0的执行结果: WorkResult{result=User{name='user0'}, resultState=SUCCESS, ex=null}
取par0的结果作为自己的入参,并将par0的结果加上一些东西
worker1 的结果是:User{name='default User'}
worker2 的结果是:default
WorkResult{result=default, resultState=EXCEPTION, ex=java.util.concurrent.ExecutionException: java.lang.ArithmeticException: / by zero}
子任务设置超时时间

设置子任务运行时间10s,子任务运行时间只有2s

public User action(String object, Map<String, WorkerWrapper> allWrappers) {
        System.out.println("-----------------");
        System.out.println("获取par0的执行结果: " + allWrappers.get("first").getWorkResult());
        System.out.println("取par0的结果作为自己的入参,并将par0的结果加上一些东西");
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        User user0 = (User) allWrappers.get("first").getWorkResult().getResult();
        return new User(user0.getName() + " worker1 add");
    }
WorkerWrapper<String, User> workerWrapper1 = new WorkerWrapper<String, User>()
                .worker(w1)
                .callback(w1)
                .id("second")
                .next(workerWrapper2)
                .timeout(2000);

运行结果

worker0 的结果是:User{name='user0'}
-----------------
获取par0的执行结果: WorkResult{result=User{name='user0'}, resultState=SUCCESS, ex=null}
取par0的结果作为自己的入参,并将par0的结果加上一些东西
worker1 的结果是:User{name='default User'}
worker2 的结果是:default
WorkResult{result=default, resultState=EXCEPTION, ex=java.util.concurrent.TimeoutException}
模拟运行中的任务停止

调用stopWork方法停止任务

 DeWorker w = new DeWorker();
        DeWorker1 w1 = new DeWorker1();
        DeWorker2 w2 = new DeWorker2();

        WorkerWrapper<User, String> workerWrapper2 = new WorkerWrapper<User, String>()
                .worker(w2)
                .callback(w2)
                .id("third");

        WorkerWrapper<String, User> workerWrapper1 = new WorkerWrapper<String, User>()
                .worker(w1)
                .callback(w1)
                .id("second")
                .next(workerWrapper2);

        WorkerWrapper<String, User> workerWrapper = new WorkerWrapper<String, User>()
                .worker(w)
                .param("0")
                .id("first")
                .next(workerWrapper1)
                .callback(w);

        //V1.3后,不用给wrapper setParam了,直接在worker的action里自行根据id获取即可

        Thread thread = new Thread(() -> {
            try {
                Async.beginWork(35000, workerWrapper);
            } catch (ExecutionException | InterruptedException e) {
                throw new RuntimeException(e);
            }
        });
        thread.start();

        System.out.println(workerWrapper2.getWorkResult());
        
        Thread.sleep(2000);
        
        //停止任务
        Async.stopWork(workerWrapper);
      
        Async.shutDown();

运行结果

WorkResult{result=null, resultState=DEFAULT, ex=null}
worker0 的结果是:User{name='user0'}
-----------------
获取par0的执行结果: WorkResult{result=User{name='user0'}, resultState=SUCCESS, ex=null}
取par0的结果作为自己的入参,并将par0的结果加上一些东西
worker2 的结果是:default
worker1 的结果是:User{name='default User'}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值