宜信開源|微服務任務排程平臺SIA-TASK入手實踐
引言
最近宜信開源微服務任務排程平臺SIA-TASK,SIA-TASK屬於分散式的任務排程平臺,使用起來簡單方便,非常容易入手,部署搭建好SIA-TASK任務排程平臺之後,編寫TASK後配置JOB進行排程,進而實現整個排程流程。本文新建了JOB示例,該JOB關聯了前後級聯的兩個TASK,TASKONE(前置TASK)和TASKTWO(後置TASK),主要闡述一個JOB怎樣關聯配置兩個級聯TASK,以及該JOB是如何通過SIA-TASK實現任務排程,最終實現對兩個TASK執行器的呼叫。
拓展閱讀:宜信開源|宜信開源微服務任務排程平臺SIA—TASK
宜信開源|分散式任務排程平臺SIA-TASK的架構設計與執行流程
首先,根據部署文件來搭建任務排程平臺。
原始碼地址:https://github.com/siaorg/sia-task
官方文件:https://github.com/siaorg/sia-task/blob/master/README.md
任務排程平臺主要由任務編排中心、任務排程中心以及ZK和DB等第三方服務構成,搭建SIA-TASK任務排程平臺需要的主要工作包括:
1.MySQL的搭建及根據建表語句建表
2.zookeeper安裝
3.SIA-TASK前端專案打包及部署
4.任務編排中心(sia-task-config)部署
5.任務排程中心(sia-task-scheduler)部署
從github上clone程式碼倉庫並下載原始碼後,可根據SIA-TASK部署指南,搭建SIA-TASK任務排程平臺並啟動,詳見SIA-TASK部署指南
搭建好SIA-TASK任務排程平臺後,下一步就是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
編寫TASK執行器主要程式碼
@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執行器例項後,啟動該執行器所在程序
啟動日誌如下圖:
日誌表明該程序正常啟動,並且TASK執行器資訊正常上傳至ZK當中,
觀察TASK管理介面,如圖示:
從圖中可知,TASK已同步至資料庫中。
再次,需要進行JOB的建立和JOB對TASK的關聯及配置。
根據使用指南進行如下操作。
建立JOB,配置引數
在JOB管理介面點選新增Job
點選後進入新增Job
介面
選定Job_Group,儘量選定所要關聯的TASK所屬的Group組名。
分別填寫Job型別及其他項,Job型別也可以選擇FixRate(特定時間點)型別,本例為CRON型別,具體數值為:0/30 * * * * ?,表示從當前時刻開始,每30秒執行一次
點選新增
,新增JOB成功。
配置TASK
新增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配置資訊詳情
最後,啟用JOB並觀察相應日誌。
TASK配置成功後,點選狀態操作
下拉按鈕中啟用
按鈕,啟用JOB。
啟用JOB後,重新整理該介面,可發現該JOB列表排程器(紅框處)出現排程器IP及埠號,表示該JOB啟用後被該排程器搶佔。
先觀察管理介面JOB及TASK日誌
成功啟用JOB後,進入排程日誌介面,等待至JOB執行時間後,可檢視到該JOB執行日誌,如下圖示。
標號1:代表該JOB日誌。
標號2:代表該JOB所關聯的前置TASK(TASKONE)日誌。
標號3:代表該JOB所關聯的後置TASK(TASKTWO)日誌。
標號4:endTask為系統追加的一個虛擬TASK,僅表示該JOB的一次排程過程完成。
同時從執行時間也可觀察出,每30秒排程一次。
再觀察執行器TASK例項日誌
還可觀察執行器例項TASK日誌,驗證是否呼叫成功。
從日誌可知,確實呼叫成功,並且每30秒呼叫一次。
停止JOB
當需要停止JOB時,點選狀態操作
下拉按鈕中停止
按鈕,停止JOB。
本文僅是對微服務任務排程平臺SIA-TASK的初步實踐使用,通過以上描述,可實現SIA-TASK對執行器例項TASK實現任務排程的功能,本文中搭建的示例非常簡單,適合快速入手SIA-TASK,當然,SIA-TASK還有更加強大的任務排程功能,可以應對更加複雜的業務場景,大家可以繼續深度使用體驗,將SIA-TASK的功能點和業務相結合,將其應用至更加複雜的業務場景之下。
作者:李興勝
來源:宜信技術