工作流调度

本文介绍如何通过可视化的工作流进行任务编排且支持Cron表达式和API。

使用说明

  • 工作流中的Job没有独立调度时间,跟随工作流的时间开始调度。

  • 工作流调度至少要有2个Job,且有依赖关系。如果只有一个Job,请直接使用任务管理。

  • 工作流支持跨应用编排,可以将不同应用下的任务进行编排。

使用限制

当前只有Java任务支持数据传输,分布式Java任务请使用MapReduce模型进行数据传输。

使用指南

具体操作,请参见流程管理

工作流上下游数据传递

SchedulerX提供工作流任务编排,同时支持任务上下游的数据传递。

返回执行结果

/**
 *
 * @param status
 * @param result, the size should be less than 1000 bytes
 * @throws Exception
 */
public ProcessResult(boolean status, String result) throws Exception;

在Processor结尾,通过该方法可以返回result执行结果。

说明

result的长度不能超过1000字节,不是String的长度。如果有中文字符,可能会超过1000字节,超过1000字节时任务会失败。

获取上游数据

List<JobInstanceData> upstreamDatas = JobContext.getUpstreamData();

在Processor里,可以通过该接口从JobContext中获取上游的数据,上游的数据是一个list(可能有多个父节点)。JobInstanceData里有两个属性,分别是JobName和Data(String类型)。

Demo

  1. 首先编写三个JobProcessor。

    public class TestSimpleJobA extends JavaProcessor {
        @Override
        public ProcessResult process(JobContext context) throws Exception {
            System.out.println("TestSimpleJobA " + DateTime.now().toString("yyyy-MM-dd HH:mm:ss"));
            return new ProcessResult(true, String.valueOf(1));
        }
    }
    public class TestSimpleJobB extends JavaProcessor {
        @Override
        public ProcessResult process(JobContext context) throws Exception {
            System.out.println("TestSimpleJobB " + DateTime.now().toString("yyyy-MM-dd HH:mm:ss"));
            return new ProcessResult(true, String.valueOf(2));
        }
    }
    public class TestSimpleJobC extends JavaProcessor {
        @Override
        public ProcessResult process(JobContext context) throws Exception {
            List<JobInstanceData> upstreamDatas = context.getUpstreamData();
            int sum = 0;
            for (JobInstanceData jobInstanceData : upstreamDatas) {
                System.out.println("jobName=" + jobInstanceData.getJobName() 
                		+ ", data=" + jobInstanceData.getData());
                sum += Integer.valueOf(jobInstanceData.getData());
            }
            System.out.println("TestSimpleJobC sum=" + sum);
            return new ProcessResult(true, String.valueOf(sum));
        }
    }
  2. 通过控制台配置工作流如下图所示:

    image.png

  3. 触发一次该工作流之后,在左侧导航栏单击执行列表>流程实例列表,找到创建的工作流名称。然后单击实例ID/流程实例图,进入工作流实例详情页面,右键单击JobA的实例,选择详情,进入任务实例详情,可以看到JobA实例结果=1,如下图:

    image.png同理,可以看到JobB的实例结果=2, JobC的实例结果=3。

  4. 在控制台查看JobC机器的打印信息。

    jobName=jobB, data=2
    jobName=jobA, data=1
    TestSimpleJobC sum=3