最近宜信開源微服務任務調度平臺SIA-TASK,SIA-TASK屬於分佈式的任務調度平臺,使用起來簡單方便,很是容易入手,部署搭建好SIA-TASK任務調度平臺以後,編寫TASK後配置JOB進行調度,進而實現整個調度流程。本文新建了JOB示例,該JOB關聯了先後級聯的兩個TASK,TASKONE(前置TASK)和TASKTWO(後置TASK),主要闡述一個JOB怎樣關聯配置兩個級聯TASK,以及該JOB是如何經過SIA-TASK實現任務調度,最終實現對兩個TASK執行器的調用。前端
拓展閱讀:宜信開源|宜信開源微服務任務調度平臺SIA—TASKjava
源碼地址:https://github.com/siaorg/sia-taskgithub
官方文檔:https://github.com/siaorg/sia-task/blob/master/README.mdspring
任務調度平臺主要由任務編排中心、任務調度中心以及ZK和DB等第三方服務構成,搭建SIA-TASK任務調度平臺須要的主要工做包括:數據庫
1.MySQL的搭建及根據建表語句建表json
2.zookeeper安裝springboot
3.SIA-TASK前端項目打包及部署架構
4.任務編排中心(sia-task-config)部署app
5.任務調度中心(sia-task-scheduler)部署
從github上clone代碼倉庫並下載源碼後,可根據SIA-TASK部署指南,搭建SIA-TASK任務調度平臺並啓動,詳見SIA-TASK部署指南
搭建好SIA-TASK任務調度平臺後,下一步就是TASK執行器實例的編寫啦。
根據SIA-TASK開發指南,編寫了兩個TASK示例,TASKONE(前置TASK)和TASKTWO(後置TASK),具體開發規則見SIA-TASK開發指南,TASK示例關鍵配置即代碼在下文有詳細展現與介紹。
該示例爲springboot項目,而且須要經過POM文件引入SIA-TASK的執行器關鍵依賴包sia-task-hunter來實現task執行器的自動抓取,首先須要將SIA-TASK源碼中的sia-task-hunter包用mvn install命令打包爲jar包安裝至本地倉庫,SIA-TASK源碼中的sia-task-hunter包以下圖示:
而後就能夠進行示例的編寫,示例主要包括如下幾部分:
POM
文件關鍵依賴<!-- 此處添加個性化依賴(sia-task-hunter) --> <dependency> <groupId>com.sia</groupId> <artifactId>sia-task-hunter</artifactId> <version>1.0.0</version> </dependency>
# 項目名稱(必須) spring.application.name: onlinetask-demo # 應用端口號(必須) server.port: 10086 # zookeeper地址(必須) zooKeeperHosts: *.*.*.*:2181,*.*.*.*:2181,*.*.*.*:2181 # 是否開啓 AOP 切面功能(默認爲true) spring.aop.auto: true # 是否開啓 @OnlineTask 串行控制(若是使用則必須開啓AOP功能)(默認爲true)(可選) spring.onlinetask.serial: true
@Controller public class OpenTestController { @OnlineTask(description = "success,無入參",enableSerial=true) @RequestMapping(value = "/success-noparam", method = { RequestMethod.POST }, produces = "application/json;charset=UTF-8") @CrossOrigin(methods = { RequestMethod.POST }, origins = "*") @ResponseBody public String taskOne() { Map<String, String> info = new HashMap<String, String>(); info.put("result", "success-noparam"); info.put("status", "success"); System.out.println("調用taskOne任務成功"); return JSONHelper.toString(info); } @OnlineTask(description = "success,有入參",enableSerial=true) @RequestMapping(value = "/success-param", method = { RequestMethod.POST }, produces = "application/json;charset=UTF-8") @CrossOrigin(methods = { RequestMethod.POST }, origins = "*") @ResponseBody public String taskTwo(@RequestBody String json) { Map<String, String> info = new HashMap<String, String>(); info.put("result", "success-param"+"入參是:"+json); info.put("status", "success"); System.out.println("調用taskTwo任務成功"); return JSONHelper.toString(info); } }
啓動日誌以下圖:
日誌代表該進程正常啓動,而且TASK執行器信息正常上傳至ZK當中,
觀察TASK管理界面,如圖示:
從圖中可知,TASK已同步至數據庫中。
根據使用指南進行以下操做。
在JOB管理界面點擊添加Job
點擊後進入添加Job
界面
選定Job_Group,儘可能選定所要關聯的TASK所屬的Group組名。
分別填寫Job類型及其餘項,Job類型也能夠選擇FixRate(特定時間點)類型,本例爲CRON類型,具體數值爲:0/30 * * * * ?,表示從當前時刻開始,每30秒執行一次
點擊添加
,添加JOB成功。
添加JOB成功後,須要爲該JOB配置相應的TASK,可配置單個或多個,本例以配置兩個級聯TASK爲例。
點擊配置TASK
後,進入Task信息配置
界面。
如上圖所示,將須要配置的兩個TASK均拉取至右側,點擊編輯
按鈕(鉛筆形狀),進入TASK參數配置
界面。
TASKONE參數配置:
TASKTWO參數配置:
按圖中編輯完成後,點擊添加
,成功將TASKONE和TASKTWO配置至JOB中。
添加完畢後,可進行兩個TASK的依賴關係配置,以下圖所示:
用箭頭將TASKONE(前置TASK)指向TASKTWO(後置TASK),便可完成TASK之間的依賴關係設置,點擊提交,完成整個JOB的配置,配置完成後,可點擊TASK信息
按鈕,查看TASK配置信息詳情
,觀察該JOB的TASK配置狀況。
TASK配置信息圖
TASK配置信息詳情
TASK配置成功後,點擊狀態操做
下拉按鈕中激活
按鈕,激活JOB。
激活JOB後,刷新該界面,可發現該JOB列表調度器(紅框處)出現調度器IP及端口號,表示該JOB激活後被該調度器搶佔。
成功激活JOB後,進入調度日誌界面,等待至JOB執行時間後,可查看到該JOB執行日誌,以下圖示。
標號1:表明該JOB日誌。
標號2:表明該JOB所關聯的前置TASK(TASKONE)日誌。
標號3:表明該JOB所關聯的後置TASK(TASKTWO)日誌。
標號4:endTask爲系統追加的一個虛擬TASK,僅表示該JOB的一次調度過程完成。
同時從執行時間也可觀察出,每30秒調度一次。
還可觀察執行器實例TASK日誌,驗證是否調用成功。
從日誌可知,確實調用成功,而且每30秒調用一次。
當須要中止JOB時,點擊狀態操做
下拉按鈕中中止
按鈕,中止JOB。
本文僅是對微服務任務調度平臺SIA-TASK的初步實踐使用,經過以上描述,可實現SIA-TASK對執行器實例TASK實現任務調度的功能,本文中搭建的示例很是簡單,適合快速入手SIA-TASK,固然,SIA-TASK還有更增強大的任務調度功能,能夠應對更加複雜的業務場景,你們能夠繼續深度使用體驗,將SIA-TASK的功能點和業務相結合,將其應用至更加複雜的業務場景之下。