xxl-job源碼解析


1、xxl-job架構圖

 

2、調度器源碼解析

2.1 代碼包說明

 contorller包:用於處理控制台相關請求;一般情況下,控制台中的操作只修改數據庫,實際任務觸發等還是由后台線程處理

service包:controller業務層代碼

dao包:數據庫處理

core包:核心包,用於線程初始化、執行器掃描、任務觸發、告警、日志處理等

resource包:基礎參數配置(application.properties)、數據庫mapper.xml、前端代碼

2.2 項目加載后台線程啟動流程

2.2.1:初始化core/conf包下的bean:XxlJobAdminConfig,將application.properties包中的配置讀取到內存中

2.2.2:配置加載完成后,初始化core/scheduler包下的類XxlJobScheduler,調用其init方法

2.2.3:XxlJobScheduler中的init方法

initI18n()  初始化語言配置(application.properties中的xxl.job.i18n)

JobTriggerPoolHelper.toStart(); 配置任務觸發線程池

JobRegistryHelper.getInstance().start(); 執行器管理:及時新增30s內新注冊的執行器,清除90s內未再次注冊的執行器(默認心跳保活時間30s)

JobFailMonitorHelper.getInstance().start(); 任務失敗重試處理

JobCompleteHelper.getInstance().start();  執行器執行任務10min內沒有給出結果回復,終止該任務

JobLogReportHelper.getInstance().start(); 任務執行狀態歸總,用於后台管理”運行報表"數據顯示;同時,如果日志到達清除時間,則清除日志(清除數據庫中的日志)

JobScheduleHelper.getInstance().start(); 核心中的核心,用於任務觸發

 3、執行器源碼解析(示例代碼)

3.1代碼包說明

core.config包:XxlJobConfig類用於將application.properties中的基礎配置參數讀取到內存中

service.jobhandler包:SampleXxlJob類用於創建執行任務,要執行的任務上必須加上@XxlJob注解

resource:基礎參數配置

3.2、項目啟動后線程加載流程

3.2.1 項目啟動后,XxlJobConfig將基礎配置參數加載到內存中,同時初始化bean:XxlJobSpringExecutor

3.2.2 XxlJobSpringExecutor繼承了SmartInitializingSingleton類,會在所有bean實例化完成后,執行afterSingletonsInstantiated方法

3.2.3:initJobHandlerMethodRepository(applicationContext); 將所有加了@XxlJob注解的方法,用反射的方式提取出來,統一存儲起來

3.2.4 調用父類start方法:

3.2.4.1 XxlJobFileAppender.initLogPath(logPath); 初始化配置的日志打印信息;任務執行日志,與logback無關,指application.properties中配置的xxl.job.executor.logpath

3.2.4.2 initAdminBizList(adminAddresses, accessToken); 初始化配置的調度器信息

3.2.4.3 JobLogFileCleanThread.getInstance().start(logRetentionDays); 日志清理,1天清理一次,按照配置的日志清理時間進行清理

3.2.4.4 TriggerCallbackThread.getInstance().start();  任務執行結果上報

3.2.4.5 initEmbedServer(address, ip, port, appname, accessToken); 開啟nettyServer服務,時刻等待調度中心的任務通知,然后向調度器發起注冊

4、一次簡單的任務觸發執行流程

4.1 調度器doTrigger進行任務觸發,將任務執行指令發送給執行器

4.2 執行器接收到任務執行指令后,將任務存儲到triggerQueue中

4.3 jobThread(EmbedServer啟動ExecutorBizImpl,ExecutorBizImpl中啟動jobThread)從triggerQueue取出任務執行,執行過程中將日志信息保存到callBackQueue中

4.4 執行器回調線程TriggerCallbackThread從callBackQueue取出任務執行結果上報到調度器

4.5 執行器根據任務上報結果進行后續處理(失敗重試、執行結果歸總等)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM