XXL-JOB分布式定時任務


xxl-job分布式定時任務分為兩個部分:調度中心和執行器;

調度中心通過Web頁面對任務進行CRUD操作,統一管理任務調度平台上調度任務,負責觸發調度執行。

執行器是要處理的任務

下面看一下怎么使用xxl-job分布式定時任務

初始化數據庫

請下載項目源碼並解壓,獲取 “調度數據庫初始化SQL腳本” 並執行即可。
Github地址: https://github.com/xuxueli/xxl-job
碼雲地址:http://gitee.com/xuxueli0323/xxl-job

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

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

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

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

部署調度中心

將下載的的xxl-job項目導入到IDEA中

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

配置調度中心,主要配置調度中心的數據源

server.port=9990
server.servlet.context-path=/xxl-job-admin

### 調度中心JDBC鏈接,就是剛才創建的數據庫
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

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

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

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

調度中心支持集群部署,提升調度系統容災和可用性。

調度中心集群部署時,幾點要求和建議:

DB配置保持一致;
集群機器時鍾保持一致(單機集群忽視);
建議:推薦通過nginx為調度中心集群做負載均衡,分配域名。調度中心訪問、執行器回調配置、調用API服務等操作均通過該域名進行。

創建執行器項目

創建一個SpringBoot項目,加入xxl-job-core” 的maven依賴

<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>2.3.0</version>
</dependency>

添加配置

server:
  port: 8081

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

配置執行器組件

@Configuration
public class XxlJobConfig {
    private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);

    @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
    public XxlJobSpringExecutor xxlJobExecutor() {
        logger.info(">>>>>>>>>>> xxl-job config init.");
        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
        xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
        xxlJobSpringExecutor.setAppname(appname);
        xxlJobSpringExecutor.setAddress(address);
        xxlJobSpringExecutor.setIp(ip);
        xxlJobSpringExecutor.setPort(port);
        xxlJobSpringExecutor.setAccessToken(accessToken);
        xxlJobSpringExecutor.setLogPath(logPath);
        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
        return xxlJobSpringExecutor;
    }

    /**
     * 針對多網卡、容器內部署等情況,可借助 "spring-cloud-commons" 提供的 "InetUtils" 組件靈活定制注冊IP;
     *
     *      1、引入依賴:
     *          <dependency>
     *             <groupId>org.springframework.cloud</groupId>
     *             <artifactId>spring-cloud-commons</artifactId>
     *             <version>${version}</version>
     *         </dependency>
     *
     *      2、配置文件,或者容器啟動變量
     *          spring.cloud.inetutils.preferred-networks: 'xxx.xxx.xxx.'
     *
     *      3、獲取IP
     *          String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress();
     */
}

開發第一個任務

@Slf4j
@Component
public class TestJobHandler  {

    @XxlJob("productJobHandler")
    public void productJobHandler() throws Exception {
        log.info("test xxl-job productJobHandler....");
    }
}

接下來去調度中心 添加執行器,配置執行器任務的觸發時間,打開調度中心 http://localhost:9990/xxl-job-admin/

點擊左側導航欄的 執行器管理 新增

AppName就是剛才在執行器項目中配置的執行器AppName,注冊方式選擇 自動注冊

添加任務
點擊左側導航欄的 任務管理 > 新增,執行器選擇剛才添加的執行器,JobHandler就是剛才在執行器項目中 @XxlJob("productJobHandler")注解中的值
CRON 選擇執行的時間,這里是每米執行一次,還可以填寫郵箱,任務執行出錯時會發郵件提醒

執行任務,點擊剛才添加的這條記錄后面的操作按鈕下拉列表,啟動


免責聲明!

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



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