Java XxlJob 必知必會


今天我們來通過 3W1H 來認識XxlJob

 

Step1: 第一個W(What)先來看看它是什么?

XXL-JOB 是一個分布式任務調度平台,其核心設計目標是開發迅速、學習簡單、輕量級、易擴展。現已開放源代碼並接入多家公司線上產品線,開箱即用。

 

Step2: 第二個W (Why)為什么要去學***lJob?

1. 現在越來越多的企業都開始在使用 XxlJob 做為第三方平台進行任務調度。

2. XxlJob 上手容易,學習成本低,功能強大。

3. 涉及到 XxlJob 相關的業務需要有深入的了解才可以做好全面的測試。

 

Step3: 第三個W (Where)它在系統框架中的位置?

先來看看 XxlJob 自身的系統結構:

 

 

 

Step4: H即How 怎么樣去部署和使用?

這里以單機部署為示例

(1):clone 代碼:git clone https://github.com/xuxueli/xxl-job

(2):初始化數據庫

/xxl-job/doc/db/tables_xxl_job.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:系統用戶表;

 

(3):調度中心配置

/xxl-job/xxl-job-admin/src/main/resources/application.properties

主要是配置了數據庫的連接:

### web
server.port=8080
server.servlet.context-path=/xxl-job-admin
### 調度中心JDBC鏈接:鏈接地址請保持和 2.1章節 所創建的調度數據庫的地址一致
spring.datasource.url=jdbc:mysql://192.168.3.2:3306/xxl_job_test?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=beta
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

 

(4):執行器項目配置

要與調度中心部署的地址一致

### 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 appname
### 執行器AppName [選填]:執行器心跳注冊分組依據;為空則關閉自動注冊
xxl.job.executor.appname=xxl-job-executor-demo

 

此處的執行器名稱會自動注冊到調度中心平台上面去,如下所示:

 

 

 

(5):啟動服務

先使用IDEA來啟動調度中心項目,如下所示:

 

 

 

xxl-job-admin 的8080 端口被啟動了。

再使用IDEA來啟動執行器項目,如下所示:

 

 

 

xxl-job-Executor 的8081端口被啟動了。

 

xxljob 運行原理

運行原理圖所示:

 

 

 

原理解釋:

1. 任務執行器根據配置的調度中心的地址,啟動注冊線程向調度中心的執行器管理發起自動注冊。執行器管理中保存着注冊執行器,后續會根據這個注冊信息給執行器下發任務。

 

2. 如果此時有需要執行的任務,任務管理模塊會根據執行器管理中注冊的執行器信息,向任務執行器下發任務。任務執行器中的任務執行服務接受到任務以后會將任務發送到待執行任務的隊列中,隊列中的任務會由執行線程 JobHandler 依次獲取並且執行。

這里會維護一個任務執行的線程池,池中就是一個個 JobHandler 線程,它們是執行任務的主力軍。

 

3. JobHandler 執行器基於線程池執行任務,並把執行結果放入執行結果隊列中,同時會把執行日志寫入任務日志文件中,以供日志查詢。

然后通知毀掉線程,告知任務執行完畢,回調線程會通知調度中心的監控運維模塊,任務執行完畢。

 

4. 用戶可以在調度中心查看任務日志,其過程是通過發送日志查詢請求給任務執行器中的日志服務,然后查詢任務日志文件實現的。

 

實際示例分析

示例:

1. 在任務執行器端開發一個任務示例:

內容非常的簡單,就是獲取請求的參數,然后再日志輸出。

@XxlJob("testJobHander")
public void testJobHander() throws  Exception{
    String param = XxlJobHelper.getJobParam();
    XxlJobHelper.log("the param is:"+param);
}

  2. 在調度中心 > 任務管理【頁面】>【新增】任務相關配置

如下所示:

 

 

 3. 是點擊【操作】下面的執行一次【輸入參數為:this is test】,可以查看調度日志:

 

  4. 可以查看【運行報表】數據:

 

 

歡迎關注【無量測試之道】公眾號,回復【領取資源】

Python+Unittest框架API自動化、

Python+Unittest框架API自動化、

Python+Pytest框架API自動化、

Python+Pandas+Pyecharts大數據分析、

Python+Selenium框架Web的UI自動化、

Python+Appium框架APP的UI自動化、

Python編程學習資源干貨、

資源和代碼 免費送啦~
文章下方有公眾號二維碼,可直接微信掃一掃關注即可。

備注:我的個人公眾號已正式開通,致力於IT互聯網技術的分享。

包含:數據分析、大數據、機器學習、測試開發、API接口自動化、測試運維、UI自動化、性能測試、代碼檢測、編程技術等。

微信搜索公眾號:“無量測試之道”,或掃描下方二維碼:

添加關注,讓我們一起共同成長!


免責聲明!

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



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