概述xxl-job框架
首先我們要知道什么是XXL-JOB?
官方簡介:XXL-JOB是一個分布式任務調度平台,其核心設計目標是開發迅速、學習簡單、輕量級、易擴展。現已開放源代碼並接入多家公司線上產品線,開箱即用
XXL-JOB的有點特性:
1、簡單:支持通過Web頁面對任務進行CRUD操作,操作簡單,一分鍾上手;
2、動態:支持動態修改任務狀態、啟動/停止任務,以及終止運行中任務,即時生效;
3、調度中心HA(中心式):調度采用中心式設計,“調度中心”自研調度組件並支持集群部署,可保證調度中心HA;
4、執行器HA(分布式):任務分布式執行,任務"執行器"支持集群部署,可保證任務執行HA;
5、注冊中心: 執行器會周期性自動注冊任務, 調度中心將會自動發現注冊的任務並觸發執行。同時,也支持手動錄入執行器地址;
6、彈性擴容縮容:一旦有新執行器機器上線或者下線,下次調度時將會重新分配任務;
7、路由策略:執行器集群部署時提供豐富的路由策略,包括:第一個、最后一個、輪詢、隨機、一致性HASH、最不經常使用、最近最久未使用、故障轉移、忙碌轉移等;
8、故障轉移:任務路由策略選擇"故障轉移"情況下,如果執行器集群中某一台機器故障,將會自動Failover切換到一台正常的執行器發送調度請求。
9、阻塞處理策略:調度過於密集執行器來不及處理時的處理策略,策略包括:單機串行(默認)、丟棄后續調度、覆蓋之前調度;
10、任務超時控制:支持自定義任務超時時間,任務運行超時將會主動中斷任務;
11、任務失敗重試:支持自定義任務失敗重試次數,當任務失敗時將會按照預設的失敗重試次數主動進行重試;其中分片任務支持分片粒度的失敗重試;
12、任務失敗告警;默認提供郵件方式失敗告警,同時預留擴展接口,可方便的擴展短信、釘釘等告警方式;
13、分片廣播任務:執行器集群部署時,任務路由策略選擇"分片廣播"情況下,一次任務調度將會廣播觸發集群中所有執行器執行一次任務,可根據分片參數開發分片任務;
14、動態分片:分片廣播任務以執行器為維度進行分片,支持動態擴容執行器集群從而動態增加分片數量,協同進行業務處理;在進行大數據量業務操作時可顯著提升任務處理能力和速度。
15、事件觸發:除了"Cron方式"和"任務依賴方式"觸發任務執行之外,支持基於事件的觸發任務方式。調度中心提供觸發任務單次執行的API服務,可根據業務事件靈活觸發
…
是目前主流的分布式任務調度平台,許多公司的產品業務都有XXL-JOB的接入
開源社區使用
首先從GitHub上面將項目clone下來,如果網絡問題導致速度慢也可以從Gitee上面拉取
https://www.xuxueli.com/xxl-job/#/
xxl-job架構圖
(壓縮之后可以在文件中發現他的架構圖)
分布式任務項目的簡單搭建
在GitHub上獲取源代碼
解壓、導入開發工具
修改pom.xml文件:
主要修改為:配置新的JDK版本:JDK8(默認為JDK7)
1.修改Admin中的pmx文件
2.修改xxl-job-master的pom配置文件
兩個pom文件都要添加
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>${maven-source-plugin.version}</version>
<configuration>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
修改數據源
對應數據庫文件,可以導入到自己的數據庫中
注意:如果庫中有同名的表了,需要到文件中注釋掉創建表的步驟
在數據庫中表的介紹
導入maven
結構相關介紹:
xxl-job-admin:調度中心
xxl-job-core:公共依賴
xxl-job-executor…:執行器
文件中有sql文件,運行生成庫表
- xxl_job_lock:任務調度鎖表;
- xxl_job_group:執行器信息表,維護任務執行器信息;
- xxl_job_info:調度擴展信息表: 用於保存XXL-JOB調度任務的擴展信息,如任務分組、任務名、機器地址、執行器、執行入參和報警郵件等等;
- xxl_job_log:調度日志表: 用於保存XXL-JOB任務調度的歷史信息,如調度結果、執行結果、調度入參、調度機器和執行器等等;
- xxl_job_log_report:調度日志報表:用戶存儲XXL-JOB任務調度日志的報表,調度中心報表功能頁面會用到;
- xxl_job_logglue:任務GLUE日志:用於保存GLUE更新歷史,用於支持GLUE的版本回溯功能;
- xxl_job_registry:執行器注冊表,維護在線的執行器和調度中心機器地址信息;
- xxl_job_user:系統用戶表;
啟動服務
需要啟動兩個服務,第一個是圖形化界面的啟動,一個是任務SpringBoot定時任務類基本同等於我們項目中的任務類
啟動xxl-job-admin項目[圖形化界面]
路徑: D:\demo\xxl-job-master\xxl-job-admin\src\main\java\com\xxl\job\admin\XxlJobAdminApplication.java
啟動xxl-job-executor-sample-springboot項目[定時任務類]
路徑: D:\demo\xxl-job-master\xxl-job-executor-samples\xxl-job-executor-sample-springboot\src\main\java\com\xxl\job\executor\XxlJobExecutorApplication.java
注意:其實我們項目中有兩個模板,啟動那個都可以,只是我用了SpringBoot,所以就只啟動了這個
啟動結果
訪問登錄頁面
輸入地址就可以訪問到對應的圖形化界面了
網址:http://localhost:8080/xxl-job-admin/
默認的管理員
賬號:admin
密碼:123456
登錄成功的頁面
自建分布式任務:Hello world
執行器主要分為兩種方式:
- 自動注冊
- 手動注冊
手動圖解[自動不弄,可以看視頻學習]
①創建執行器
②創建任務
③在任務后面--》操作按鈕--》開啟任務
④查看日志
執行器注意事項
1、確認pom文件中引入了 “xxl-job-core” 的maven依賴;
2、配置文件:
==>: xxl.job.admin.addresses配置(調度中心地址:例如http://127.0.0.1:8080/xxl-job-admin)
==>: xxl.job.executor.appname配置(執行器AppName,可視化界面添加執行器時需要)
==>: xxl.job.executor.port配置(執行器端口號,多個執行器時注意端口號不一致)
3、不同版本的機器地址輸入的格式不一樣
例如:
2.2版格式àhttp://IP地址:端口
1.0版格式àIP地址:端口
遇到的問題
問題1:執行器地址為空
原因--》執行器中 沒有地址
解決方案--》輸入地址:http://IP地址:端口
IP地址
端口
問題2:異常信息unknown code for readObject at 0x3c
1.錯誤提示無法找到執行器。
原因:需要啟動兩個項目 xxl-job-admin 、xxl-job-executor-samples (這里我用的是xxl-job-executor-sample-springboot)
2.調度成功了,但是執行不會停止,只能手動停止,執行結果是失敗的。
或者啟動時遇到以下的異常信息:
unknown code for readObject at 0x3c
原因:這種提示的錯誤一般出在admin配置address沒有配對。
檢查xxl-job-executor-springboot-example里面配置文件的xxl.job.admin.addresses=http://localhost:8080/xxl-job-admin
與啟動步驟2是否一致
完成!