XXL-Job框架入門介紹


框架概述

框架主頁:
https://www.xuxueli.com/xxl-job/

包含組件:
1.調度中心
2.任務執行器

特點:
1.調度中心,任務執行器獨立部署,互不影響。
2.調度中心和任務執行器都支持集群化部署,避免出現單點故障。
3.調用中心和執行器之間通過HTTP協議進行通信,因此需要把它們部署在能相互連通的網絡環境。

安裝部署

基於v2.3.0版本進行說明。

調度中心

調度中心是與業務無關的,直接從源碼編譯部署即可。

這里下載最新的項目源碼壓縮包,解壓到本地。

第一步:初始化調度中心數據庫

SQL語句文件位於項目源碼目錄中,路徑:項目源碼目錄\doc\db\tables_xxl_job.sql
初始化數據庫及表的操作比較簡單,具體實現省略。

第二步:編譯調度中心運行包

(1)進入到解壓后的項目源碼目錄,打開配置文件項目源碼目錄\xxl-job-admin\src\main\resources\application.properties
(2)修改配置參數:在此之前需要通過【第一步】完成調度中心數據庫的創建和登錄授權的設置。

  • 修改數據庫連接參數
### xxl-job, datasource
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.cj.jdbc.Driver
  • 修改報警郵件配置信息
### xxl-job, email
spring.mail.host=smtp.qq.com         # 郵件服務器主機
spring.mail.port=25                  # 郵件服務器端口 
spring.mail.username=xxx@qq.com      # 郵件賬戶
spring.mail.from=xxx@qq.com          # 發送郵件賬號,通常跟spring.mail.username值一致
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

(3)編譯調度中心運行包

進入到項目源碼目錄,執行:mvn clean package,將會在“項目源碼目錄\xxl-job-admin\target”路徑下生成調度中心運行jar包:xxl-job-admin-${version}.jar

第三步:運行調度中心

將jar包拷貝到服務器,執行:java -jar xxl-job-admin-${version}.jar即可運行並啟動調度中心進程。

如果是在IDE中進行調試,可以在修改配置參數之后直接運行即可。

調度中心啟動成功之后,訪問:http://服務器主機地址:8080/xxl-job-admin 打開調度中心管理界面。
默認用戶名/密碼:admin/123456
調度中心管理界面

任務執行器

任務執行器是跟具體業務綁定的程序邏輯,需要單獨開發。
xxl-job框架支持2種開發任務執行器的方式:
1.GLUE模式:在xxl-job管理后台動態編輯任務執行代碼並執行。
2.BEAN模式:這應該是使用得最多的方式,使用這種方式運行的執行器是一個需要獨立部署的程序。

GLUE模式任務執行器

略。

BEAN模式任務執行器

在官方給出的示例中,推薦使用基於Spring Boot框架開發任務執行器,詳細開發步驟如下:

1.新建基於Spring Boot框架的Maven項目(如果是在已經存在的Spring Boot項目中添加xxl-job任務執行器,這一步忽略)。

2.添加xxl-job核心依賴

<!-- https://mvnrepository.com/artifact/com.xuxueli/xxl-job-core -->
<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>2.3.0</version>
</dependency>

3.配置執行器運行參數
配置文件:src\main\resources\application.properties
需要配置的核心參數是2個:
(1)xxl.job.admin.addresses:調度中心地址
(2)xxl.job.executor.appname:任務執行器名稱,這個參數用於在調度中心注冊執行器

### 調度中心部署跟地址 [選填]:如調度中心集群部署存在多個地址則用逗號分隔。執行器將會使用該地址進行"執行器心跳注冊"和"任務結果回調";為空則關閉自動注冊;
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-test
### 執行器注冊 [選填]:優先使用該配置作為注冊地址,為空時使用內嵌服務 ”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

4.配置執行器組件

@Configuration
@Slf4j
public class JobExecutorConfig {
    @Value("${xxl.job.admin.addresses}")
    private String adminAddresses;

    @Value("${xxl.job.accessToken}")
    private String accessToken;

    @Value("${xxl.job.executor.appname}")
    private String appname;

    @Value("${xxl.job.executor.address}")
    private String address;

    @Value("${xxl.job.executor.ip}")
    private String ip;

    @Value("${xxl.job.executor.port}")
    private int port;

    @Value("${xxl.job.executor.logpath}")
    private String logPath;

    @Value("${xxl.job.executor.logretentiondays}")
    private int logRetentionDays;

    // 將執行器組件配置Bean注入到Spring容器中
    @Bean
    public XxlJobSpringExecutor xxlJobExecutor() {
        log.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;
    }
}

5.編寫任務執行器方法

// 任務執行器類本身也需要注入到Spring容器中
@Component
public class SimpleJobHandler {
    // 使用xxl-job-core提供的注解@XxlJob 標注這是一個執行器方法
    @XxlJob("simpleHandler")
    public void simpleHandler() throws InterruptedException {
        XxlJobHelper.log("XXL-JOB, Hello World.");

        for (int i = 0; i < 5; i++) {
            XxlJobHelper.log("beat at:" + i);
            TimeUnit.SECONDS.sleep(2);
        }
        // default success
    }
}

6.啟動任務執行器

將任務執行器項目打包,部署到服務器啟動。

如果在IDE中開發調試,直接啟動即可。

至此,調度中心還不知道該任務執行器的存在,所以在調度中心創建定時任務時無法選擇該執行器,需要在調度中心手動添加該執行器。
回調調度中心管理界面,在左側菜單欄選擇【執行器管理】,單擊【新增】,在彈出框中輸入新創建的執行器信息:

  • AppName:在執行器項目配置文件中設置的屬性xxl.job.executor.appname值,如:xxl-job-executor-test
  • 名稱:在執行器方法中使用注解@XxlJob指定的字符串名稱,如:simpleHandler
  • 注冊方式:自動注冊

點擊【保存】按鈕。

任務執行器添加成功

此時,就可以在調度中心的【執行器管理】界面中看到剛剛添加的任務執行器了。

通過上述步驟完成任務執行器在調度中心的注冊操作之后,就可以在調度中心添加定時任務時選擇對應的任務執行器了。

添加定時任務時選擇注冊成功的執行器

依賴的底層框架及核心技術

1.netty:提供http服務
https://github.com/netty/netty

2.Hessian
http://hessian.caucho.com

3.自研任務調度器

其他任務調度系統

https://github.com/PowerJob/PowerJob PowerJob


免責聲明!

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



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