一個簡單任務對應一個 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;
}
}
文檔內容是否對您有幫助?