分布式任務調(diào)度平臺XXL-JOB

1.簡介

1.1概述

XXL-JOB是一個輕量級分布式任務調(diào)度框架,其核心設計目標是開發(fā)迅速嘶伟、學習簡單系忙、輕量級、易拓展蓄拣。代碼開源,目前已接入多家公司線上產(chǎn)品努隙,比較典型的有大眾點評球恤,優(yōu)信二手車,一加手機等剃法。

1.2特性

簡單:支持通過Web頁面對任務進行CRUD操作碎捺,操作簡單路鹰;

動態(tài):支持動態(tài)修改任務狀態(tài)贷洲、暫停/恢復任務,以及終止運行中任務晋柱,即時生效优构;

調(diào)度中心HA:調(diào)度采用中心式設計,“調(diào)度中心”基于集群Quartz實現(xiàn)雁竞,可保證調(diào)度中心HA钦椭;

執(zhí)行器HA(分布式):任務分布式執(zhí)行,任務“執(zhí)行器”支持集群部署碑诉,可保證任務執(zhí)行HA彪腔;

任務Failover:執(zhí)行器集群部署時,任務路由策略選擇“故障轉(zhuǎn)移”情況下調(diào)度失敗時將會平滑切換執(zhí)行器進行Failover进栽;

一致性:“調(diào)度中心”通過DB鎖保證集群分布式調(diào)度的一致性德挣,一次任務調(diào)度只會觸發(fā)一次執(zhí)行;

自定義任務參數(shù):支持在線配置調(diào)度任務入?yún)⒖烀磿r生效格嗅;

調(diào)度線程池:調(diào)度系統(tǒng)多線程觸發(fā)調(diào)度運行,確保調(diào)度精確執(zhí)行唠帝,不被堵塞屯掖;

彈性擴容縮容:一旦有新執(zhí)行器上線或者下線,下次調(diào)度時將會重新分配任務襟衰;

郵件報警:任務失敗時支持郵件報警贴铜,支持配置多郵件地址群發(fā)報警郵件;

狀態(tài)監(jiān)控:支持實時監(jiān)控任務進度瀑晒;

Rolling執(zhí)行日志:支持在線查看調(diào)度結果绍坝,并且支持以Rolling方式實時查看執(zhí)行器輸出的完整的執(zhí)行日志;

GLUE:提供Web IDE瑰妄,支持在線開發(fā)任務邏輯代碼陷嘴,動態(tài)發(fā)布,實時編譯生效间坐,省略部署上線的過程灾挨。支持30個版本的歷史版本回溯邑退;

數(shù)據(jù)加密:調(diào)度中心和執(zhí)行器之間的通訊進行數(shù)據(jù)加密,提升調(diào)度信息安全性劳澄;

任務依賴:支持配置子任務依賴地技,當父任務執(zhí)行結束且執(zhí)行成功后將會主動觸發(fā)一次子任務的執(zhí)行,多個子任務用逗號分隔秒拔;

推送maven中央倉庫:將會把最新穩(wěn)定版推送到maven中央倉庫莫矗,方便用戶接入和使用;

任務注冊:執(zhí)行器會周期性自動注冊任務砂缩,調(diào)度中心將會自動發(fā)現(xiàn)注冊的任務并觸發(fā)執(zhí)行作谚。同時,也支持手動錄入執(zhí)行器地址庵芭;

路由策略:執(zhí)行器集群部署時提供豐富的路由策略妹懒,包括:第一個、最后一個双吆、輪詢眨唬、隨機、一致性Hash好乐、最不經(jīng)常使用匾竿、最近最久未使用、故障轉(zhuǎn)移蔚万、忙碌轉(zhuǎn)移等岭妖;

1.3下載

源碼倉庫地址

https://github.com/xuxueli/xxl-jobDownload

中央倉庫地址


圖1-1 中央倉庫地址



2.項目實踐

2.1初始化“調(diào)度數(shù)據(jù)庫”

數(shù)據(jù)庫環(huán)境:Mysql5.6+

初始化SQL腳本tables_xxl_job.sql,正常情況下應該生成16張表笛坦。

調(diào)度中心支持集群部署区转,集群情況下各節(jié)點務必連接同一個Mysql示例

導入源碼

xxl-job-admin:調(diào)度中心

xxl-job-executor:執(zhí)行器

xxl-job-executor-sample-springboot:Springboot版本,通過Springboot管理執(zhí)行器

2.2部署“調(diào)度中心”

調(diào)度中心配置:/xxl-job/xxl-job-admin/src/main/resources/xxl-job-admin.properties

配置內(nèi)容說明:


圖2-1 調(diào)度中心配置


>>>>>郵箱地址無效需自行配置

>>>>>dispatchertask為數(shù)據(jù)庫名稱

部署項目

正確配置后版扩,將項目編譯打包(war)部署在tomcat(/webapps目錄下)废离,修改tomcat配置文件,如下礁芦,即代表調(diào)度中心部署成功蜻韭。


圖2-2 Tomcat配置

調(diào)度中心訪問地址http://localhost:8080/xxl-job-admin,登錄后運行界面如下圖所示


圖2-3 調(diào)度中心訪問地址

3.部署執(zhí)行器項目

3.1配置文件和配置類

確認pom文件引入了xxl-job-core的maven依賴柿扣,添加執(zhí)行器配置:


圖3-1 執(zhí)行器配置

Addresses:調(diào)度中心部署根地址肖方,執(zhí)行器將會使用該地址進行執(zhí)行器心跳注冊和任務結果回調(diào)

Appname:執(zhí)行器心跳注冊分組依據(jù),即同一個集群下的執(zhí)行器appname必須一致

Ip:默認為空表示自動獲取IP未状,也可以手動設置

Port:執(zhí)行器默認端口9999俯画,集群下的執(zhí)行器要配置不同的端口

AccessToken:執(zhí)行器通訊Token,非空時啟用司草,進行數(shù)據(jù)加密

注:日志基于logback艰垂,logback的使用請另找出處泡仗。

Config配置


圖3-2 執(zhí)行器配置類

3.2執(zhí)行器集群

執(zhí)行器支持集群部署,提升調(diào)度系統(tǒng)可用性猜憎,同時提升任務處理能力

集群部署唯一要求為:保證集群中每個執(zhí)行器的配置項“調(diào)度中心地址”保持一致娩怎,執(zhí)行器根據(jù)配置進行執(zhí)行器自動注冊等操作。

調(diào)度中心添加執(zhí)行器


圖3-3 添加執(zhí)行器

AppName:執(zhí)行器配置中的Appname值胰柑,執(zhí)行器會周期性以AppName為對象進行自動注冊截亦。

名稱:執(zhí)行器名稱,因為AppName限制字母數(shù)字等組成柬讨,可讀性不強崩瓤,名稱為了提高執(zhí)行器的可讀性

排序:執(zhí)行器的排序,新增任務時姐浮,將會按照該排序讀取可用的執(zhí)行器列表

注冊方式:調(diào)度中心獲取執(zhí)行器地址的方式谷遂;

自動注冊:執(zhí)行器自動進行執(zhí)行器注冊,調(diào)度中心通過底層注冊表可以動態(tài)發(fā)現(xiàn)執(zhí)行器地址

手動錄入:人工手動錄入執(zhí)行器的地址信息卖鲤,多地址逗號分隔,供調(diào)度中心使用

機器地址:“注冊方式”為手動錄入時有效畴嘶,支持人工維護執(zhí)行器的地址信息蛋逾。

3.4新建任務

想要完成什么樣的功能,必須由開發(fā)者手動編寫實現(xiàn)窗悯,以“獲取所有航司數(shù)據(jù)”為例:


圖3-4 執(zhí)行器添加任務

>>>>execute方法實現(xiàn)自己要執(zhí)行的任務

運行執(zhí)行器之后区匣,即可在調(diào)度中心新增任務


圖3-5 調(diào)度中心添加任務

執(zhí)行器:任務的綁定的執(zhí)行器,任務觸發(fā)調(diào)度時將會自動發(fā)現(xiàn)注冊成功的執(zhí)行器

描述:任務的描述信息蒋院,便于任務管理

路由策略:當執(zhí)行器集群部署時亏钩,提供豐富的路由策略,包括欺旧,

第一個:固定選擇第一個機器姑丑;

最后一個:固定選擇最后一個機器;

輪詢:執(zhí)行器循環(huán)執(zhí)行

隨機:隨機選擇在線的機器

一致性HASH:每個任務按照Hash算法固定選擇某一臺機器辞友,且所有任務均勻散列在不同機器上

最不經(jīng)常使用:使用頻率最低的機器優(yōu)先被選舉

最近最久未使用:輪詢的倒序選用

故障轉(zhuǎn)移:按照順序依次進行心跳檢測栅哀,第一個心跳檢測成功的機器選定為目標執(zhí)行器并發(fā)起調(diào)度

忙碌轉(zhuǎn)移:按照順序依次進行空閑檢測,第一個空閑檢測成功的機器選定為目標執(zhí)行器并發(fā)起調(diào)度

Cron:觸發(fā)任務執(zhí)行的Cron表達式

運行模式

模式:任務以JobHandler方式維護在執(zhí)行器端称龙,需要結合“JobHandler”屬性匹配執(zhí)行器中任務

JobHandler:運行模式為“Bean”時生效留拾,對應執(zhí)行器中新開發(fā)的JobHandler類@JobHandler注解自定義的value值

子任務Key:每個任務都擁有一個唯一的任務Key(任務Key可以從任務列表獲取)鲫尊,當本任務執(zhí)行結束并且執(zhí)行成功時痴柔,將會觸發(fā)子任務Key所對應的任務的一次主動調(diào)度。

阻塞處理策略:調(diào)度過于密集執(zhí)行器來不及處理時的處理策略疫向,

單機串行:調(diào)度請求進入單機執(zhí)行器后咳蔚,調(diào)度請求進入FIFO隊列并以串行方式運行扛施;

丟棄后續(xù)調(diào)度:調(diào)度請求進入單機執(zhí)行器后,發(fā)現(xiàn)執(zhí)行器存在運行的調(diào)度任務屹篓,本次請求將會將丟棄并標記為失敻碓;

覆蓋之前調(diào)度:調(diào)度請求進入單機執(zhí)行器后堆巧,發(fā)現(xiàn)執(zhí)行器存在運行的調(diào)度任務妄荔,將會終止運行中的調(diào)度任務并清空隊列,然后運行本地調(diào)度任務

失敗處理策略

失敗告警:調(diào)度失敗時谍肤,將會觸發(fā)失敗報警啦租,如發(fā)送報警郵件;

失敗重試:調(diào)度失敗時荒揣,將會主動進行一次失敗重試調(diào)度篷角,重試調(diào)度后仍然失敗將會觸發(fā)失敗告警。注意當任務以failover方式路由時系任,每次失敗重試將會觸發(fā)新一輪路由恳蹲;

執(zhí)行參數(shù):任務執(zhí)行所需的參數(shù),多個參數(shù)時用逗號分隔俩滥,任務執(zhí)行時將會把多個參數(shù)轉(zhuǎn)換為數(shù)組傳入

報警郵件:任務調(diào)度失敗時郵件通知的郵箱地址嘉蕾,支持配置多郵箱地址,配置多個郵箱地址時用逗號分隔

3.5Cron表達式詳細用法

Cron表達式的格式

{秒數(shù)}{分鐘}{小數(shù)}{日期}{月份}{星期}{年份{可為空}}? ? ??

| 字段 | 允許值 | 允許的特殊字符 |

| --------? | -----:? | :----: |

| 秒? ? ? ? | 0-59? ? |? , - * /? ? |

| 分? ? ? ? | 0-59? ? ? |? , - * /? |

| 小時? ? ? ? | 0-23? ? ? |? , - * /? |

| 日期? ? ? ? | 1-31? ? |? , - * ? / L W C? |

| 月份? ? ? | 1-12或者JAN-DEC? ? |? , - * /? |

| 星期? ? ? ? | 1-12或者JAN-DEC? ? |? , - * ? / L W C #? |

| 年? ? ? ? | 1970-2099? ? |? , - * /? |

允許值范圍:0~59霜旧,不允許為空值

“*”代表每隔1秒鐘觸發(fā)

“,”代表在指定的秒數(shù)觸發(fā)错忱,比如”0,15,45”代表0秒、15秒和45秒觸發(fā)

“-”代表在指定的范圍內(nèi)觸發(fā)挂据,比如”25-45”代表從25秒開始觸發(fā)到45秒結束觸發(fā)以清,每隔1秒觸發(fā)一次

“/”代表觸發(fā)步進,”/”前面的值代表初始值("*”等同”0”),后面的值代表偏移量崎逃,比如”0/20”或者”*/20”代表從0秒開始掷倔,每隔20秒觸發(fā)一次

特殊字符

“*

“*”字符被用來指定所有的值。如:"*"在分鐘的字段域里表示“每分鐘”婚脱。

“?

“?”字符只在日期域和星期域中使用今魔。它被用來指定“非明確的值”。當你需要通過在這兩個域中的一個來指定一些東西的時候障贸,它是有用的错森。

-

“-”字符被用來指定一個范圍。如:“10-12”在小時域意味著“10點篮洁、11點涩维、12點”。

,

“,”字符被用來指定另外的值。如:“MON,WED,FRI”在星期域里表示”星期一瓦阐、星期三蜗侈、星期五”。

/

“/”字符用于指定增量睡蟋。如:“0/15”在秒域意思是每分鐘的0踏幻,15,30和45秒戳杀「妹妫“5/15”在分鐘域表示每小時的5,20信卡,35和50隔缀。符號“*”在“/”前面(如:*/10)等價于0在“/”前面(如:0/10)。記住一條本質(zhì):表達式的每個數(shù)值域都是一個有最大值和最小值的集合傍菇,如:秒域和分鐘域的集合是0-59猾瘸,日期域是1-31,月份域是1-12丢习。字符“/”可以幫助你在每個字符域中取相應的數(shù)值牵触。如:“7/6”在月份域的時候只有當7月的時候才會觸發(fā),并不是表示每個6月泛领。

W

字符“W”只允許日期域出現(xiàn)荒吏。這個字符用于指定日期的最近工作日。例如:如果你在日期域中寫“15W”渊鞋,表示:這個月15號最近的工作日。所以瞧挤,如果15號是周六锡宋,則任務會在14號觸發(fā)。如果15號是周日特恬,則任務會在周一也就是16號觸發(fā)执俩。

#

字符“#”只允許在星期域中出現(xiàn)。這個字符用于指定本月的某某天癌刽。例如:“6#3”表示本月第三周的星期五(6表示星期五役首,3表示第三周)。

C

字符“C”允許在日期域和星期域出現(xiàn)显拜。這個字符依靠一個指定的“日歷”衡奥。也就是說這個表達式的值依賴于相關的“日歷”的計算結果,如果沒有“日歷”關聯(lián)远荠,則等價于所有包含的“日歷”矮固。如:日期域是“5C”表示關聯(lián)“日歷”中第一天,或者這個月開始的第一天的后5天譬淳。星期域是“1C”表示關聯(lián)“日歷”中第一天档址,或者星期的第一天的后1天盹兢,也就是周日的后一天(周一)。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末守伸,一起剝皮案震驚了整個濱河市绎秒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌尼摹,老刑警劉巖见芹,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異窘问,居然都是意外死亡辆童,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門惠赫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來把鉴,“玉大人,你說我怎么就攤上這事儿咱⊥タ常” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵混埠,是天一觀的道長怠缸。 經(jīng)常有香客問我,道長钳宪,這世上最難降的妖魔是什么揭北? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮吏颖,結果婚禮上搔体,老公的妹妹穿的比我還像新娘。我一直安慰自己半醉,他們只是感情好疚俱,可當我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著缩多,像睡著了一般呆奕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上衬吆,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天梁钾,我揣著相機與錄音,去河邊找鬼咆槽。 笑死陈轿,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播麦射,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蛾娶,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了潜秋?” 一聲冷哼從身側(cè)響起蛔琅,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎峻呛,沒想到半個月后罗售,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡钩述,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年寨躁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片牙勘。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡职恳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出方面,到底是詐尸還是另有隱情放钦,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布恭金,位于F島的核電站操禀,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏横腿。R本人自食惡果不足惜颓屑,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望耿焊。 院中可真熱鬧邢锯,春花似錦、人聲如沸搀别。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽歇父。三九已至,卻和暖如春再愈,著一層夾襖步出監(jiān)牢的瞬間榜苫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工翎冲, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留垂睬,地道東北人。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像驹饺,于是被迫代替她去往敵國和親钳枕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 《分布式任務調(diào)度平臺XXL-JOB》 一赏壹、簡介 1.1 概述 XXL-JOB是一個輕量級分布式任務調(diào)度框架鱼炒,其核心...
    許雪里閱讀 16,793評論 3 29
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)蝌借,斷路器昔瞧,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • 項目中使用了新浪微博的Montan來替代Dubbo,發(fā)現(xiàn)@MotanAsync注解很強大,將注解寫在要暴露的接口上...
    H_Man閱讀 582評論 0 2
  • PPT的循環(huán)結構表示還是很常用的自晰,這個圖一看就是專業(yè)設計過的,從配色到質(zhì)感都不錯稍坯。有沒有比較快的方法能搞定呢酬荞? 場...
    秦川_牛閃閃閱讀 11,561評論 0 2
  • 小徑通酒村 枯樹立新鎮(zhèn) 舊楹聯(lián)墨褪輕嘆欲斷魂 孤祭舊墳青草 霡霂淅瀝 舊時三書大禮 朱顏酡些 紅葉之盟 光陰方寸 ...
    王穎亮咯閱讀 113評論 0 0