job-dispatcher工作流編排、任務調度引擎
job-dispatcher
介紹
一個工作流編排,任務調度引擎
GtiHub地址:https://github.com/xuda783380930/job-dispatcher.git
基本模型:
基于事件或者定時生成一個job,每個job由若干個task組成,task之間存在串行或并行的依賴關系
task的具體實現引由客戶端(用戶自己編程實現),調度引擎只負責按照拓撲順序發(fā)出HTTP信號觸發(fā)任務
由客戶端發(fā)出HTTP通知引擎任務任務的完成狀態(tài),調度引擎據此繼續(xù)發(fā)出后續(xù)調度信號
使用場景:
任務編排,事件驅動或時間驅動的任務調度,如企業(yè)級ETL調度等
特點:
調度引擎只做調度和任務編排,不參與具體任務實現和執(zhí)行,可看作一個HTTP信號發(fā)射和接收器,具有極大的適用性,天生支持異構系統(tǒng),引擎端和任務實現端徹底的解耦。
job-dispatcher是微服務中的一個獨立組件,而非作業(yè)平臺,因此它并不去實現各類任務的運行環(huán)境的適配工作,任何實現了配置中子任務HTTP啟動接口的程序都可以作為job-dispatche的客戶端,無論是何種語言何種數據庫的程序。
相似項目: Linkedin公司推出的Azkaban , 國產軟件TASKCTL, 歡迎大家對比提出意見
軟件架構
軟件架構說明
1.時間調度引擎:基于Quartz,按時觸發(fā)對應的Job
2.Job引擎:可注冊JobBuilder(包含子任務的依賴關系),Job引擎收到觸發(fā)信號后,根據builder生成JobBox實例(包含批次時間和任務執(zhí)行狀態(tài)) 按照時間順序JobBox被Put到隊列中,隊首的JobBox會被消費,即按照拓撲關系依次發(fā)出信號,直到所有子任務執(zhí)行完畢,繼續(xù)執(zhí)行下一個 JobBox。
3.使用的框架:JDK1.8,SpringBoot2.0,Quartz,JPA,Echarts,Amazeui,Swagger2
安裝教程
1.修改對應的jdbc數據源配置和pom里面的jdbc驅動依賴
2.基于Springboot,用maven打包成Jar后啟動即可
使用說明
-
JDK1.8環(huán)境,通過默認端口瀏覽器訪問就可以看到主頁
-
通過quartz/registerjob接口,傳入Json格式的Job配置文件注冊任務即可,具體如下
1.任務端向引擎注冊一個定時Job http://ip:port/quartz/register?json={}
//通過下列的json配置樣例
{
"jobBoxBuilder": {
"jobCode": "job1", "monitorParas":{mobileNos:[ "18621711111","18616152222"]} //短信收信人 "taskBuilderMap": [ //Job內的task組成列表 { "taskCode": "task1", "adapterPara": "http://172.11.33.44/trigger?jobCode=jos1&taskCode=task1", "upstreamTaskCodes": ["task2"], //依賴task2,task2完成后task1才可執(zhí)行 "overTime":"60" //超時時間60分鐘則報警 }, { "taskCode": "task2", "adapterPara": "http://172.11.33.44/trigger? jobCode=jos2&taskCode=task2" //"upstreamTaskCodes":[] //不依賴任何任務可以不填該字段 //"overTime":"60" //可不填 } ]},
"jobCronExpression": "0 0/1 11 * * ?", //每天11點每隔一分鐘執(zhí)行一次
"filterCalendarName": "nonTradingDays" //過濾nonTradingDays日歷組
}
2.任務端向引擎通知任務執(zhí)行情況
UNSTART("未開始", 0),TRIGGERED("正在觸發(fā)", 1),STARTED("正在執(zhí)行", 2),NEED_RESTART("需重新執(zhí)行", 3), PAUSED("已暫停", 4),FINISHED("已完畢", 5);
http://ip:port/task/call?jobcode=job1&taskcode=task2&status=0
3.查看job的等待隊列的情況,查看正在執(zhí)行的job的情況(通過前端頁面關系圖查看)
