全部产品

简单任务

更新时间:2019-12-26 17:33:19

简单任务 是最基本的任务类型,适用于业务逻辑简单的场景。单个简单任务对应一个 handler,支持任务分片及分步:

  • 当需要并发执行并且不关注资源利用率时,可以使用简单任务的分片功能。
  • 当需要将一个任务分成若干步骤按顺序执行时,可以使用简单任务的分步功能。

实现处理器接口

  1. /**
  2. * 简单任务处理器接口
  3. */
  4. public interface ISimpleJobHandler extends IJobHandler {
  5. /**
  6. * 处理request
  7. *
  8. * @param context
  9. * @return
  10. */
  11. ClientCommonResult handle(JobExecuteContext context);
  12. }

代码说明

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

  • 在控制台创建任务时设置的自定义参数,可以通过 getCustomParam(String key) 方法获取。
  • 如果设置了任务分片,可以通过方法 getSharding() 来获取当前机器分配到的分片号。

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

实现类

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

  • handle:在该方法里执行业务逻辑。
  • getThreadPool:获取一个执行该任务的线程池,如果没有设置,会使用 client 自带的线程池。
    1. new ThreadPoolExecutor(20,
    2. 300, 1, TimeUnit.HOURS, new ArrayBlockingQueue<Runnable>(100) {})
  • getName:获取这个执行器的名字,这个名字很重要,client 接收到任务的触发请求时,会根据名字寻找匹配的执行器。

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

代码示例

  1. public class AlwaysSuccessHandler implements ISimpleJobHandler {
  2. public static final String NAME = "ALWAYS_SUCCESS_JOB";
  3. @Override
  4. public ClientCommonResult handle(JobExecuteContext context) throws InterruptedException {
  5. //处理业务逻辑
  6. return ClientCommonResult.buildSuccessResult();
  7. }
  8. @Override
  9. public ThreadPoolExecutor getThreadPool() {
  10. return null;
  11. }
  12. @Override
  13. public String getName() {
  14. return NAME;
  15. }
  16. }

相关操作