分布式任務調度平台XXL-JOB簡單使用


一:環境配置:

  • Maven3+
  • Jdk1.8+
  • Mysql5.7+

二、快速入門

2.1下載項目

下載項目源碼並解壓,獲取 “調度數據庫初始化SQL腳本” 並執行即可。

“調度數據庫初始化SQL腳本” 位置為:

/xxl-job/doc/db/tables_xxl_job.sql

調度中心支持集群部署,集群情況下各節點務必連接同一個mysql實例;

如果mysql做主從,調度中心集群節點務必強制走主庫;

2.2 編譯源碼

解壓源碼,按照maven格式將源碼導入IDE, 使用maven進行編譯即可,源碼結構如下:

/xxl-job-admin:調度中心
/xxl-job-core:公共依賴
/xxl-job-executor-samples:執行器Sample示例(選擇合適的版本執行器,可直接使用,也可以參考其並將現有項目改造成執行器)
:xxl-job-executor-sample-springboot:Springboot版本,通過Springboot管理執行器,推薦這種方式;
:xxl-job-executor-sample-frameless:無框架版本;

 

2.3 配置部署“調度中心”

調度中心項目:xxl-job-admin
作用:統一管理任務調度平台上調度任務,負責觸發調度執行,並且提供任務管理平台。

步驟一:調度中心配置:

調度中心配置文件地址:

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

調度中心配置內容說明:

### 調度中心JDBC鏈接:鏈接地址請保持和 2.1章節 所創建的調度數據庫的地址一致
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root_pwd
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
### 報警郵箱
spring.mail.host=smtp.qq.com
spring.mail.port=25
spring.mail.username=xxx@qq.com
spring.mail.password=xxx
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
### 調度中心通訊TOKEN [選填]:非空時啟用;
xxl.job.accessToken=
### 調度中心國際化配置 [必填]: 默認為 "zh_CN"/中文簡體, 可選范圍為 "zh_CN"/中文簡體, "zh_TC"/中文繁體 and "en"/英文;
xxl.job.i18n=zh_CN
## 調度線程池最大線程配置【必填】
xxl.job.triggerpool.fast.max=200
xxl.job.triggerpool.slow.max=100
### 調度中心日志表數據保存天數 [必填]:過期日志自動清理;限制大於等於7時生效,否則, 如-1,關閉自動清理功能;
xxl.job.logretentiondays=30

步驟二:部署項目:

如果已經正確進行上述配置,可將項目編譯打包部署。

調度中心訪問地址:http://localhost:8080/xxl-job-admin (該地址執行器將會使用到,作為回調地址)

默認登錄賬號 “admin/123456”, 登錄后運行界面如下圖所示。

 

 至此“調度中心”項目已經部署成功。

2.4 配置部署“執行器項目”

步驟一:maven依賴

確認pom文件中引入了 “xxl-job-core” 的maven依賴;

步驟二:執行器配置

執行器配置,配置文件地址:

/xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.properties

執行器配置,配置內容說明:

### 調度中心部署跟地址 [選填]:如調度中心集群部署存在多個地址則用逗號分隔。執行器將會使用該地址進行"執行器心跳注冊"和"任務結果回調";為空則關閉自動注冊;
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
### 執行器通訊TOKEN [選填]:非空時啟用;
xxl.job.accessToken=
### 執行器AppName [選填]:執行器心跳注冊分組依據;為空則關閉自動注冊
xxl.job.executor.appname=xxl-job-executor-sample
### 執行器注冊 [選填]:優先使用該配置作為注冊地址,為空時使用內嵌服務 ”IP:PORT“ 作為注冊地址。從而更靈活的支持容器類型執行器動態IP和動態映射端口問題。
xxl.job.executor.address=
### 執行器IP [選填]:默認為空表示自動獲取IP,多網卡時可手動設置指定IP,該IP不會綁定Host僅作為通訊實用;地址信息用於 "執行器注冊" 和 "調度中心請求並觸發任務";
xxl.job.executor.ip=
### 執行器端口號 [選填]:小於等於0則自動獲取;默認端口為9999,單機部署多個執行器時,注意要配置不同執行器端口;
xxl.job.executor.port=9999
### 執行器運行日志文件存儲磁盤路徑 [選填] :需要對該路徑擁有讀寫權限;為空則使用默認路徑;
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
### 執行器日志文件保存天數 [選填] : 過期日志自動清理, 限制值大於等於3時生效; 否則, 如-1, 關閉自動清理功能;
xxl.job.executor.logretentiondays=30

步驟三:執行器組件配置

執行器組件,配置文件地址:

/xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/core/config/XxlJobConfig.java

復制一份到自己項目中即可。

步驟四:部署執行器項目:

如果已經正確進行上述配置,可將執行器項目運行。

2.5 開發第一個任務“Hello World”

1、新建任務:HelloXXJob 

package com.xxl.job.executor.service.jobhandler;

import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.stereotype.Component;

/**
 * @description:
 * @author: tlj
 * @time: 2021/9/2 17:06
 */
@Component
public class HelloXXJob {
    @XxlJob("hello")
    public void helloJob() {
        for (int i = 0; i < 5; i++) {
            System.out.println("heool xxjob");
        }
    }
}

2、先創建一個執行器(我這里使用默認的執行器),然后在任務管理新建任務。

 

 

 3、創建好后在任務列表可以查看任務:

 4、點擊執行一次:可以看到在IDEA控制台的輸出結果。

 

 5、在查看執行日志發現執行成功

 6、至此,一個簡單的任務就創建成功了。

三:現在來看一下配置詳解:

1、調度中心配置文件地址:

 

### 調度中心JDBC鏈接:鏈接地址請保持和 2.1章節 所創建的調度數據庫的地址一致
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root_pwd
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
### 報警郵箱
spring.mail.host=smtp.qq.com
spring.mail.port=25
spring.mail.username=xxx@qq.com
spring.mail.password=xxx
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
### 調度中心通訊TOKEN [選填]:非空時啟用;
xxl.job.accessToken=
### 調度中心國際化配置 [必填]: 默認為 "zh_CN"/中文簡體, 可選范圍為 "zh_CN"/中文簡體, "zh_TC"/中文繁體 and "en"/英文;
xxl.job.i18n=zh_CN
## 調度線程池最大線程配置【必填】
xxl.job.triggerpool.fast.max=200
xxl.job.triggerpool.slow.max=100
### 調度中心日志表數據保存天數 [必填]:過期日志自動清理;限制大於等於7時生效,否則, 如-1,關閉自動清理功能;
xxl.job.logretentiondays=30

2

執行器配置,配置文件地址:

/xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.properties
### 調度中心部署跟地址 [選填]:如調度中心集群部署存在多個地址則用逗號分隔。執行器將會使用該地址進行"執行器心跳注冊"和"任務結果回調";為空則關閉自動注冊;
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
### 執行器通訊TOKEN [選填]:非空時啟用;
xxl.job.accessToken=
### 執行器AppName [選填]:執行器心跳注冊分組依據;為空則關閉自動注冊
xxl.job.executor.appname=xxl-job-executor-sample
### 執行器注冊 [選填]:優先使用該配置作為注冊地址,為空時使用內嵌服務 ”IP:PORT“ 作為注冊地址。從而更靈活的支持容器類型執行器動態IP和動態映射端口問題。
xxl.job.executor.address=
### 執行器IP [選填]:默認為空表示自動獲取IP,多網卡時可手動設置指定IP,該IP不會綁定Host僅作為通訊實用;地址信息用於 "執行器注冊" 和 "調度中心請求並觸發任務";
xxl.job.executor.ip=
### 執行器端口號 [選填]:小於等於0則自動獲取;默認端口為9999,單機部署多個執行器時,注意要配置不同執行器端口;
xxl.job.executor.port=9999
### 執行器運行日志文件存儲磁盤路徑 [選填] :需要對該路徑擁有讀寫權限;為空則使用默認路徑;
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
### 執行器日志文件保存天數 [選填] : 過期日志自動清理, 限制值大於等於3時生效; 否則, 如-1, 關閉自動清理功能;
xxl.job.executor.logretentiondays=30

3、任務配置屬性詳細說明:

 

基礎配置:
    - 執行器:任務的綁定的執行器,任務觸發調度時將會自動發現注冊成功的執行器, 實現任務自動發現功能; 另一方面也可以方便的進行任務分組。每個任務必須綁定一個執行器, 可在 "執行器管理" 進行設置;
    - 任務描述:任務的描述信息,便於任務管理;
    - 負責人:任務的負責人;
    - 報警郵件:任務調度失敗時郵件通知的郵箱地址,支持配置多郵箱地址,配置多個郵箱地址時用逗號分隔;
觸發配置:
    - 調度類型:
        無:該類型不會主動觸發調度;
        CRON:該類型將會通過CRON,觸發任務調度;
        固定速度:該類型將會以固定速度,觸發任務調度;按照固定的間隔時間,周期性觸發;
        固定延遲:該類型將會以固定延遲,觸發任務調度;按照固定的延遲時間,從上次調度結束后開始計算延遲時間,到達延遲時間后觸發下次調度;
    - CRON:觸發任務執行的Cron表達式;
    - 固定速度:固件速度的時間間隔,單位為秒;
    - 固定延遲:固件延遲的時間間隔,單位為秒;
任務配置:
    - 運行模式:
        BEAN模式:任務以JobHandler方式維護在執行器端;需要結合 "JobHandler" 屬性匹配執行器中任務;
        GLUE模式(Java):任務以源碼方式維護在調度中心;該模式的任務實際上是一段繼承自IJobHandler的Java類代碼並 "groovy" 源碼方式維護,它在執行器項目中運行,可使用@Resource/@Autowire注入執行器里中的其他服務;
        GLUE模式(Shell):任務以源碼方式維護在調度中心;該模式的任務實際上是一段 "shell" 腳本;
        GLUE模式(Python):任務以源碼方式維護在調度中心;該模式的任務實際上是一段 "python" 腳本;
        GLUE模式(PHP):任務以源碼方式維護在調度中心;該模式的任務實際上是一段 "php" 腳本;
        GLUE模式(NodeJS):任務以源碼方式維護在調度中心;該模式的任務實際上是一段 "nodejs" 腳本;
        GLUE模式(PowerShell):任務以源碼方式維護在調度中心;該模式的任務實際上是一段 "PowerShell" 腳本;
    - JobHandler:運行模式為 "BEAN模式" 時生效,對應執行器中新開發的JobHandler類“@JobHandler”注解自定義的value值;
    - 執行參數:任務執行所需的參數;     
高級配置:
    - 路由策略:當執行器集群部署時,提供豐富的路由策略,包括;
        FIRST(第一個):固定選擇第一個機器;
        LAST(最后一個):固定選擇最后一個機器;
        ROUND(輪詢):;
        RANDOM(隨機):隨機選擇在線的機器;
        CONSISTENT_HASH(一致性HASH):每個任務按照Hash算法固定選擇某一台機器,且所有任務均勻散列在不同機器上。
        LEAST_FREQUENTLY_USED(最不經常使用):使用頻率最低的機器優先被選舉;
        LEAST_RECENTLY_USED(最近最久未使用):最久未使用的機器優先被選舉;
        FAILOVER(故障轉移):按照順序依次進行心跳檢測,第一個心跳檢測成功的機器選定為目標執行器並發起調度;
        BUSYOVER(忙碌轉移):按照順序依次進行空閑檢測,第一個空閑檢測成功的機器選定為目標執行器並發起調度;
        SHARDING_BROADCAST(分片廣播):廣播觸發對應集群中所有機器執行一次任務,同時系統自動傳遞分片參數;可根據分片參數開發分片任務;
    - 子任務:每個任務都擁有一個唯一的任務ID(任務ID可以從任務列表獲取),當本任務執行結束並且執行成功時,將會觸發子任務ID所對應的任務的一次主動調度。
    - 調度過期策略:
        - 忽略:調度過期后,忽略過期的任務,從當前時間開始重新計算下次觸發時間;
        - 立即執行一次:調度過期后,立即執行一次,並從當前時間開始重新計算下次觸發時間;
    - 阻塞處理策略:調度過於密集執行器來不及處理時的處理策略;
        單機串行(默認):調度請求進入單機執行器后,調度請求進入FIFO隊列並以串行方式運行;
        丟棄后續調度:調度請求進入單機執行器后,發現執行器存在運行的調度任務,本次請求將會被丟棄並標記為失敗;
        覆蓋之前調度:調度請求進入單機執行器后,發現執行器存在運行的調度任務,將會終止運行中的調度任務並清空隊列,然后運行本地調度任務;
    - 任務超時時間:支持自定義任務超時時間,任務運行超時將會主動中斷任務;
    - 失敗重試次數;支持自定義任務失敗重試次數,當任務失敗時將會按照預設的失敗重試次數主動進行重試;

4、配置執行器

 

AppName: 是每個執行器集群的唯一標示AppName, 執行器會周期性以AppName為對象進行自動注冊。可通過該配置自動發現注冊成功的執行器, 供任務調度時使用;
名稱: 執行器的名稱, 因為AppName限制字母數字等組成,可讀性不強, 名稱為了提高執行器的可讀性;
排序: 執行器的排序, 系統中需要執行器的地方,如任務新增, 將會按照該排序讀取可用的執行器列表;
注冊方式:調度中心獲取執行器地址的方式;
    自動注冊:執行器自動進行執行器注冊,調度中心通過底層注冊表可以動態發現執行器機器地址;
    手動錄入:人工手動錄入執行器的地址信息,多地址逗號分隔,供調度中心使用;
機器地址:"注冊方式"為"手動錄入"時有效,支持人工維護執行器的地址信息;

四、完結撒花。。。

 


免責聲明!

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



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