xxl-job工作中比較少用的特性(分片任務(wù),父子任務(wù),GLUE模式)

一般情況下我們開發(fā)一個(gè)定時(shí)任務(wù)的時(shí)候,就從隔壁的定時(shí)任務(wù)copy一下,加一些必要的注解,然后再到調(diào)度中心配置一下,也沒怎么去關(guān)注其他的功能。

最近無聊看了一遍xxl-job的文檔,發(fā)現(xiàn)一些自己沒怎么去關(guān)注過的特性,可能以后工作中可以用起來,先記錄一下。

一、分片廣播

int shardIndex = XxlJobHelper.getShardIndex(); //分片序號(hào)

int shardTotal = XxlJobHelper.getShardTotal(); //總分片數(shù)

這兩個(gè)值是我們可以直接獲取到的,只要依賴了xxl-job的包

分片:我們可以理解成總的任務(wù)節(jié)點(diǎn)數(shù),一般微服務(wù)我們都是部署在集群里邊的,一個(gè)服務(wù)可能有好幾個(gè)節(jié)點(diǎn),那么分片總數(shù)就是總節(jié)點(diǎn)數(shù),分片序號(hào)也可以理解成執(zhí)行定時(shí)任務(wù)的節(jié)點(diǎn)序號(hào)

有了這兩個(gè)值,我們可以將我們的任務(wù)分解成多個(gè),分布式去執(zhí)行,這樣效率就會(huì)快很多。

比如說,我們的定時(shí)任務(wù)需要對(duì)數(shù)據(jù)庫里的數(shù)據(jù)做處理,服務(wù)節(jié)點(diǎn)有3個(gè),那么我們可以把數(shù)據(jù)分成三份去處理,比如 數(shù)據(jù)id/shardTotal == shardIndex ,判斷是否由當(dāng)前節(jié)點(diǎn)去處理,如何分解任務(wù)到多個(gè)節(jié)點(diǎn)去執(zhí)行我們可以自己根據(jù)具體的業(yè)務(wù)去決定。

另外也可以執(zhí)行廣播任務(wù),一般情況下我們都是希望任務(wù)在一個(gè)節(jié)點(diǎn)執(zhí)行就行,但我們選擇分片廣播,如果我們不對(duì)任務(wù)進(jìn)行分解,那么每個(gè)節(jié)點(diǎn)丟會(huì)執(zhí)行一樣的任務(wù),適用的場(chǎng)景比如廣播集群節(jié)點(diǎn)進(jìn)行緩存更新等

注:這時(shí)候的路由策略我們需要選擇“SHARDING_BROADCAST(分片廣播)”

二、父子任務(wù)


有時(shí)候我們的定時(shí)任務(wù)執(zhí)行是有先后順序的,某個(gè)定時(shí)任務(wù)依賴另一個(gè)定時(shí)任務(wù),我們可能會(huì)選擇把需要后執(zhí)行的任務(wù)執(zhí)行時(shí)間設(shè)置到晚于依賴的定時(shí)任務(wù),比如晚5分鐘,半小時(shí)執(zhí)行這樣子,但這樣如果前一個(gè)任務(wù)突然故障或者說執(zhí)行了很久,導(dǎo)致還沒執(zhí)行完依賴的任務(wù)就開始執(zhí)行了,就會(huì)造成一些數(shù)據(jù)混亂或者說異常。

因此我們?cè)谂渲萌蝿?wù)的時(shí)候可以配置子任務(wù)的id,當(dāng)父任務(wù)執(zhí)行結(jié)束且執(zhí)行成功后將會(huì)主動(dòng)觸發(fā)一次子任務(wù)的執(zhí)行, 多個(gè)子任務(wù)用逗號(hào)分隔;

三、GLUE模式


大部分情況我們都是選擇Bean模式,將定時(shí)任務(wù)作為一個(gè)類寫在服務(wù)里面,服務(wù)啟動(dòng)的時(shí)候再自動(dòng)注冊(cè)到調(diào)度中心。但是GLUE模式源碼是維護(hù)在調(diào)度中心的,我們可以直接在頁面編輯源碼,而且支持多種語言,比如java、shell、python等,還有版本回溯功能,這樣當(dāng)我們要開發(fā)一些和業(yè)務(wù)關(guān)系不大的定時(shí)任務(wù)的時(shí)候可以直接在平臺(tái)上開發(fā),在平臺(tái)上維護(hù)。


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容