实现处理器接口和类

一个简单任务对应一个 handler,支持任务分片及分步:

  • 当需要并发执行并且不关注资源利用率时,可以使用简单任务的分片功能。

  • 当需要将一个任务分成若干步骤按顺序执行时,可以使用简单任务的分步功能。

实现处理器接口

/**
 * 简单任务处理器接口
 */
public interface ISimpleJobHandler extends IJobHandler {

    /**
     * 处理request
     *
     * @param context
     * @return
     */
    ClientCommonResult handle(JobExecuteContext context);
}

代码说明

JobExecuteContext 是触发任务的请求上下文,可以从里面获取到任务的一些信息,比如:

  • 在控制台创建任务时设置的自定义参数,可以通过 getCustomParam(String key) 方法获取。

  • 如果设置了任务分片,可以通过方法 getSharding() 来获取当前机器分配到的分片号。

详细信息,可以查看 com.alipay.antschedulerclient.model.JobExecuteContext 这个类的源码。

实现类

类里必须实现以下三个方法:

  • handle:在该方法里执行业务逻辑。

  • getThreadPool:获取一个执行该任务的线程池,如果没有设置,会使用 Client 自带的线程池。

    new ThreadPoolExecutor(20,300,1,TimeUnit.HOURS,new ArrayBlockingQueue<Runnable>(100){})
  • getName:获取这个执行器的名字,这个名字很重要,Client 接收到任务的触发请求时,会根据名字寻找匹配的执行器。

当任务需要按多个步骤执行时,需要写多个实现类,并在控制台开启分步功能。

代码示例

public class AlwaysSuccessHandler implements ISimpleJobHandler {

    public static final String NAME = "ALWAYS_SUCCESS_JOB";

    @Override
    public Client CommonResulthandle(JobExecuteContext context) throws InterruptedException {
        //处理业务逻辑
        return ClientCommonResult.buildSuccessResult();
    }

    @Override
    public ThreadPoolExecutor getThreadPool() {
        return null;
    }

    @Override
    public String getName() {
        return NAME;
    }
}