分布式排程平台XXL JOB原始碼分析 排程中心

2022-07-25 00:03:14 字數 2528 閱讀 3884

上圖是我們要進行原始碼分析的2.1版本的整體架構圖。其分為兩大塊,排程中心和執行器,本文先分析排程中心,也就是xxl-job-admin這個包的**。

配置類xxljobadminconfig,裡面維護了一些排程中心端的配置資料。

xxljobscheduler這個元件實現了initializingbean介面,所以spring容器在初始化的時候會呼叫afterpropertiesset方法,此方法如下:

第一步國際化相關。

第二步監控相關。

第三步失敗重試相關。

第四步啟動admin端服務,接收註冊請求等。

第五步jobschedulehelper排程器,死迴圈,在xxl_job_info表裡取將要執行的任務,更新下次執行時間的,呼叫jobtriggerpoolhelper類,來給執行器傳送排程任務的

這個類就是死迴圈從xxl_job_info表中取出未來5秒內要執行的任務,進行排程分發。

啟動了兩個守護執行緒,先來看schedulethread。

死迴圈內的**如上圖,首先利用for update語句進行獲取任務的資格鎖定,再去獲取未來5秒內即將要執行的任務。

展開遍歷任務的邏輯**,有三個分支

第乙個分支當前任務的觸發時間已經超時5秒以上了,不在執行,直接計算下一次觸發時間。

第二個分支為觸發時間已滿足,利用jobtriggerpoolhelper這個類進行任務排程,之後判斷下一次執行時間如果在5秒內,進行此任務資料的快取,處理邏輯與第三個分支一樣。

對觸發時間秒數進行60取模,跟進pushtimering方法

ringdata是以0到59的整數為key,以jobid集合為value的map集合。這個集合資料的處理邏輯,就在我們第二個守護執行緒ringthread中。

1

while (!ringthreadtostop) 11}

12//

ring trigger

13 logger.debug(">>>>>>>>>>> xxl-job, time-ring beat : " + nowsecond + " = " +arrays.aslist(ringitemdata) );

14if (ringitemdata!=null && ringitemdata.size()>0)

20//

clear

21ringitemdata.clear();22}

23 } catch

(exception e) ", e);26}

27}28//

next second, align second

29try

catch

(interruptedexception e) 35}

36 }

根據當前秒數刻度和前乙個刻度進行時間輪的任務獲取,之後和上文一樣,利用jobtriggerpoolhelper進行任務排程。

如前文所述,不管是schedulethread還是ringthread,最後完成任務排程的都是jobtriggerpoolhelper.trigger方法,這個類有兩個執行緒池fasttriggerpool和slowtriggerpool,顧名思義,分別是執行較快任務和較慢任務的,後查官方文件,如下:

mintim屬性,作用待明確

jobtimeoutcountmap屬性,計數,key為jobid,value使用atomicinteger計數。

helper靜態變數指向自己本身,提供外部靜態方法呼叫。

重要方法,向兩種執行緒池其中之一提交排程任務,進行排程,引出xxljobtrigger這個類,一路跟進去

繼續跟進

至此,完成執行器的任務排程。

分布式任務排程平台xxl job

分布式定時器配置 xxl job enable true 是否啟用 accesstoken job admin 配置的token admin addresses 排程中心位址 executor ip 執行器日誌儲存天數 選填 值大於3時生效,啟用執行器log檔案定期清理功能,否則不生效 logret...

分布式任務排程平台XXL JOB與dubbo整合

輕量級分布式任務排程平台是基於進行修改的任務排程平台。具體文件可以參照 原生的xxl job不支援dubbo,而是使用了作者自己開發的xxl rpc。與我們目前的技術棧不符。所以對xxl job做了二次開發,使其支援dubbo的服務呼叫。請看 dubbo springboot starter是基於公...

XXL JOB 輕量級分布式任務排程平台

簡述 xxl job是乙個輕量級分布式任務排程平台,分布式任務排程中心。github doc 文件資料 db 排程資料庫 建表指令碼 xxl job admin 排程中心,專案原始碼 xxl job core 公共jar依賴 xxl job executor samples 執行器,sample示例...