《github精選系列》——分散式任務排程平臺XXL-JOB

1 簡單總結

1 說明

2 特點

3 搭建排程中心

架構圖

《github精選系列》——分散式任務排程平臺XXL-JOB

git地址:https://gitee。com/xuxueli0323/xxl-job

2 主要介紹

2.1 說明

XXL-JOB是一個分散式任務排程框架,核心設計目標是快速開發、學習簡單、輕量級、易擴充套件。

2.2 特點

1。簡單:支援透過網頁對任務進行CRUD操作,操作簡單,一分鐘上手;

2。動態:支援動態修改任務狀態、暫停/恢復任務、終止正在執行的任務,即時生效;

3。排程中心HA(中心型):排程中心設計,“排程中心”基於Quartz的叢集實現,可以保證排程-中心HA;

4。Executor HA(Distributed):任務分散式執行,任務“執行者”支援叢集部署,保證任務執行HA;

5。Task Failover:部署Excutor叢集,當路由器的策略選擇“failover”時,任務會平滑切換執行器;

6。一致性:“排程中心”透過DB鎖保證叢集分散式排程的一致性,一個任務執行一次;

7。自定義任務引數:支援線上配置排程任務匯入引數,即時生效;

8。排程執行緒池:排程系統多執行緒觸發排程操作,保證排程準確,不阻塞;

9。彈性擴容:一旦新的執行機上線或下線,下次排程將重新分配任務;

10。郵件告警:任務失敗支援郵件告警,支援配置多個郵箱傳送批次告警資訊;

11。狀態監控:支援實時監控任務進度;

12。Rolling執行日誌:支援線上檢視排程結果,支援Rolling實時檢視完整執行日誌的執行器輸出;

13。GLUE:提供Web IDE,支援線上開發任務邏輯程式碼,動態釋出,實時編譯有效,省略上線流程的部署。支援30個版本回溯的歷史版本;

14。資料加密:排程中心與執行器之間的通訊用於資料加密,增強排程資訊的安全性;

15。Task Dependency:支援配置子任務依賴,當父任務執行結束並執行成功後會主動觸發第二個任務執行,多個子任務之間用逗號隔開;

16。推送Maven中央倉庫:將最新的穩定版本傳送到Maven中央倉庫,方便使用者訪問和使用;

17。任務註冊:執行器定期自動註冊任務,排程中心自動查詢註冊的任務並觸發執行。還支援手動輸入執行器地址;

18。Router策略:在executor叢集部署時提供了豐富的路由策略,包括:first、last、poll、random、consistent HASH、最不常用、最近最少使用、failover、busy over、分片廣播等。 ;

19。報表監控:支援實時檢視執行資料,如任務數、排程數、執行者數等;排程報告,如排程日期分佈、排程成功圖等;

20。指令碼任務:支援GLUE模式下指令碼任務的開發和執行,包括shell、Python等型別的指令碼;

21。阻塞處理策略:排程太密集,執行器來不及處理。策略包括:單機串列埠(預設),丟棄後面的排程,覆蓋前面的排程;

22。失敗處理策略:排程失敗時的處理策略,策略包括:失敗告警(預設)、失敗重試;

23。分片廣播任務:部署執行器叢集時,任務路由策略選擇“分片廣播”,一個任務排程會廣播叢集中的所有執行器執行一次,可以根據分片引數開發分片任務;

24。動態分片:分片廣播任務由執行器分片,支援執行器叢集動態擴容,動態增加分片數,配合業務控制代碼;在大資料量的操作中可以顯著提高任務處理能力和速度。

25、事件觸發:除了“Cron”和“Task Dependency”觸發任務外,支援基於事件的觸發任務。排程中心提供觸發單次執行任務的API服務,可根據業務事件靈活觸發。

2.3 使用步驟

拋開架構和原理,拿到一個新東西,首先讓我們能夠使用起來,搭建一個自己的任務

第一步: 下載原始碼下載地址:https://github。com/xuxueli/xx。。。

第二步: 執行sql檔案地址:xxl-job/doc/db/tables_xxl_job。sql

第三步: 修改xxl-job-admin專案配置配置檔案:application。properties配置項:

### xxl-job, datasourcespring。datasource。url=${datasource。url}spring。datasource。username=${datasource。username}spring。datasource。password=${datasource。password}

打包命令:

xxl-job-admin git:(master) mvn clean -U package -Dmaven。test。skip=true

啟動命令:

xxl-job-admin git:(master) cd target target git:(master) java -jar xxl-job-admin-2。1。0。jar

訪問http://127。0。0。1:8080/xxl-job-admin 賬號:admin密碼:123456看到如下頁面即搭建成功

《github精選系列》——分散式任務排程平臺XXL-JOB

編寫程式碼

第一步:

搭建一個springboot專案,application。properties加入如下配置:

# web portserver。port=8081# log configlogging。config=classpath:logback。xml### xxl-job admin address list, such as “http://address” or “http://address01,http://address02”xxl。job。admin。addresses=http://127。0。0。1:8080/xxl-job-admin### xxl-job executor addressxxl。job。executor。appname=xxl-job-executor-samplexxl。job。executor。ip=xxl。job。executor。port=9999### xxl-job, access tokenxxl。job。accessToken=### xxl-job log pathxxl。job。executor。logpath=/data/applogs/xxl-job/jobhandler### xxl-job log retention daysxxl。job。executor。logretentiondays=-1

第二步:

編寫配置類

@Configurationpublic class XxlJobConfig { private Logger logger = LoggerFactory。getLogger(XxlJobConfig。class); @Value(“${xxl。job。admin。addresses}”) private String adminAddresses; @Value(“${xxl。job。executor。appname}”) private String appName; @Value(“${xxl。job。executor。ip}”) private String ip; @Value(“${xxl。job。executor。port}”) private int port; @Value(“${xxl。job。accessToken}”) private String accessToken; @Value(“${xxl。job。executor。logpath}”) private String logPath; @Value(“${xxl。job。executor。logretentiondays}”) private int logRetentionDays; @Bean(initMethod = “start”, destroyMethod = “destroy”) public XxlJobSpringExecutor xxlJobExecutor() { logger。info(“>>>>>>>>>>> xxl-job config init。”); XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); xxlJobSpringExecutor。setAdminAddresses(adminAddresses); xxlJobSpringExecutor。setAppName(appName); xxlJobSpringExecutor。setIp(ip); xxlJobSpringExecutor。setPort(port); xxlJobSpringExecutor。setAccessToken(accessToken); xxlJobSpringExecutor。setLogPath(logPath); xxlJobSpringExecutor。setLogRetentionDays(logRetentionDays); return xxlJobSpringExecutor; }

第三步:

編寫jobhandler

@JobHandler(value=“demoJobHandler”)@Componentpublic class DemoJobHandler extends IJobHandler { @Override public ReturnT execute(String param) throws Exception { XxlJobLogger。log(“XXL-JOB, Hello World。”); for (int i = 0; i < 5; i++) { XxlJobLogger。log(“beat at:” + i); TimeUnit。SECONDS。sleep(2); } return SUCCESS; }}

第四步:

啟動springboot專案後,配置執行器

《github精選系列》——分散式任務排程平臺XXL-JOB

點選儲存後

《github精選系列》——分散式任務排程平臺XXL-JOB

出現這個,即為配置成功

第五步:

配置jobhandler,新增任務

《github精選系列》——分散式任務排程平臺XXL-JOB

第六步:

點選執行一次看看效果

《github精選系列》——分散式任務排程平臺XXL-JOB

到此springboot整合xxl-job就完成了,在後續新增任務時,只需要編寫相應的handler去繼承IJobHandler即可。

2.4 排程器的組成結構

《github精選系列》——分散式任務排程平臺XXL-JOB

github精選系列

,會持續更新,想了解的朋友可以

關注

,文章有幫助的話可以

長按

點贊

有驚喜!!!文章比較長,大家可以先

收藏

轉發

後再看

有什麼補充可以在下面

評論

,謝謝大家