一个简单任务对应一个 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;
}
}
文档内容是否对您有帮助?