唉,在談文章之前先說一下自己的情況。原計劃是在上周六寫完這篇文章的,然而周六的時候打開電腦的,按照平常"慣例",先補一些 “黑色五葉草”/“進巨”的番,然后刷著刷著就忘記寫??,接著就逛逛知乎,逛逛b站。啪地一下,趁我不注意??,周六日就過去,于是就拖到了這周才來更新(立下的flag總是被自己打倒??)。這周六日我有也有寫部分,不過發(fā)現(xiàn)做一個這樣的教程類文章也是挺耗時間(這篇文章差不多耗了我兩個周末的時間),要先自己搭建完好之后,然后把其中每一步的操作都記錄下來,相當于為了寫這篇文章,我搭了2,3次 xxl-job ??。 不過寫完之后,感覺對于自己收獲也挺大的,順便復習了一下 Shell 的相關(guān)命令和 Java 項目的命令行啟動。以后還是要加油??!盡量堅持周更!向著大神們學習。

上一個篇文章 分布式調(diào)度任務(wù)系統(tǒng)調(diào)研及選型,我們介紹了常用的一些開源的分布式調(diào)度系統(tǒng),知道了xxl-job 目前基本是中小型公司的第一選擇。所以這篇文章,就來介紹一下xxl-job 的安裝和簡單使用。
這里安裝是基于 Ubuntu 16.04 安裝的。
另外我可沒有標題黨,我看了一下 GitHub 上開源的分布式調(diào)度系統(tǒng),目前是 xxl-job 項目是分布式調(diào)度開源系統(tǒng)中最多 starts 的(當然也有可能因為這個 xxl-job 出來挺久了)

window ,mac 或docker 安裝
如果為 window,mac 等安裝,可以先根據(jù)github 上的 SQL 腳本創(chuàng)建好數(shù)據(jù)庫和表,然后直接將github 上的源碼 導入到 idea 按照Spring Boot 應用來啟動即可。
如果為 docker 的安裝,可以直接pull 官方鏡像,然后運行時指定 MySQL 和存儲日志目錄即可。
下載鏡像
# Docker地址:https://hub.docker.com/r/xuxueli/xxl-job-admin/ (建議指定版本號)
docker pull xuxueli/xxl-job-admin
創(chuàng)建容器并運行
# 如需自定義 mysql 等配置,可通過 "-e PARAMS" 指定,參數(shù)格式 PARAMS="--key=value --key2=value2" ;
# 配置項參考文件:/xxl-job/xxl-job-admin/src/main/resources/application.properties
# 如需自定義 JVM內(nèi)存參數(shù) 等配置,可通過 "-e JAVA_OPTS" 指定,參數(shù)格式 JAVA_OPTS="-Xmx512m" ;
docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai" -p 8080:8080 -v /tmp:/data/applogs --name xxl-job-admin -d xuxueli/xxl-job-admin:{指定版本}
linux Ubuntu 16.04 安裝 xxl-job
在linux下直接安裝 xxl-job 會有點麻煩, 因為 xxl-job 并沒有像 nacos 之類的直接提供了一個啟動包,直接修改一下配置文件,然后運行啟動腳本即可那種。xxl-job 是只提供了的源碼文件,如果要運行,需要自己先將 java 源碼 通過 maven 打包構(gòu)建成運行包,然后才能運行。所以接下來我來詳細講述一下如何再linux 下安裝啟動 xxl-job,這里使用的 linux 版本為:Ubuntu 16.04。 其他版本也類似。
安裝 jdk ,maven ,git 環(huán)境
首先我們先需要安裝 Java 相關(guān)的環(huán)境,因為xxl-job 是 Java 開發(fā)的,在沒有提供啟動包的基礎(chǔ)上,我們需要自己從源碼解釋編譯成啟動包,然后啟動。
安裝 JDK
安裝有兩種一種是直接根據(jù) apt 的包安裝,另一種是手動獲取 java 包安裝。這里我們?yōu)榱撕唵纹鹨娛褂?apt 直接安裝,如果需要更多自定義的配置可以手動安裝。執(zhí)行運行以下兩個命令即可安裝 jdk8 版本的。
sudo apt-get update
sudo apt-get install openjdk-8-jdk -y
安裝 maven
我們這里也直接采用 apt 包的安裝
sudo apt-get -y update
sudo apt install maven -y
待安裝完成之后,運行
mvn -v
即可檢查是否安裝成功了
這里安裝了 maven 之后還需要將 maven 的默認的遠程倉庫地址換成 國內(nèi)的遠程倉庫地址,不然下載 maven 依賴的時候會很慢。打開 /etc/maven/settings.xml 文件,在 <mirrors>標簽里面添加以下內(nèi)容,即可將默認倉庫替換成阿里云的倉庫。
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
安裝 GIT
我們這里還需要安裝 GIT ,主要是為了可以方便復制源碼到本機,當然也可以通過直接 curl 獲取到文件,然后解壓。不過 git 總是有用,所以我們這里也安裝了
sudo apt-get -y update
sudo apt-get install git -y
安裝數(shù)據(jù)庫
初始化數(shù)據(jù)庫的腳步為xxl-job的git 項目中的 /xxl-job/doc/db/tables_xxl_job.sql的文件,在已經(jīng)安裝了 MySQL 的機器上連接上,然后執(zhí)行即可
默認xxl-job 是支持集群部署的,只要連接相同的數(shù)據(jù)庫即可
另外如果 MySQL 有做主從部署,則 xxl-job 連接的一定要為主庫,也不能使用讀寫分離的賬號,否則在調(diào)度的時候可能會出現(xiàn)問題
git clone 源碼文件,打包構(gòu)建
git clone https://gitee.com/xuxueli0323/xxl-job.git
cd xxl-job/
mvn -B -Dmaven.test.skip=true clean package
cd xxl-job-admin/target
# 這里 根據(jù)不同的xxl-job的版本,文件名不一樣
unzip xxl-job-admin-2.3.0-SNAPSHOT.jar
# 解壓之后,進入BOOT-INT/target/class/ 目錄即可看到調(diào)度中心的配置文件 `application.properties`,修改里面的數(shù)據(jù)庫鏈接和密碼即可,如果考慮調(diào)度系統(tǒng)的調(diào)用的安全性可以加上, xxl.job.accessToken= 參數(shù)
# 修改完成之后,然后進入到 /xxl-job/xxl-job-admin/target 目錄下執(zhí)行以下命令來啟動 xxl-job
/usr/local/java/bin/java -classpath ./:./lib/* org.springframework.boot.loader.JarLauncher &
執(zhí)行之后,如果啟動成功會顯示如下圖這樣

然后打開鏈接: http://127.0.0.1:8080/xxl-job-admin (該地址執(zhí)行器將會使用到,作為回調(diào)地址)
輸入默認的賬號和密碼, “admin/123456”,登錄即可看到調(diào)度中心。(需要將127.0.0.1 換成自己的機器的ip)

安裝執(zhí)行器項目
安裝完成調(diào)度中心之后,我們還需要安裝執(zhí)行器項目,調(diào)度中心本身是不負責執(zhí)行項目,要安裝執(zhí)行器之后,才能通過調(diào)度中心去執(zhí)行器服務(wù)上執(zhí)行。安裝執(zhí)行器項目很簡單,基本上就是安裝調(diào)度中心那樣安裝啟動即可,我們這里為了簡單起見,可以直接啟動 xxl-job 自帶Spring Boot的簡單執(zhí)行器?;谏厦婵寺∠聛淼捻椖?,我們進入 /xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/target 目錄。如果要修改調(diào)度中心的地址的信息、調(diào)度中心的驗證的key等,可以修改配置文件,該執(zhí)行器的配置文件為 /xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/target/BOOT-INF/classes/application.properties。
然后執(zhí)行以下命令即可啟動執(zhí)行器項目:
/usr/local/java/bin/java -classpath ./:./lib/* org.springframework.boot.loader.JarLauncher &
簡單使用 xxl-job
經(jīng)過上面的步驟,我們就有一個簡單的調(diào)度中心系統(tǒng)了?;谶@個調(diào)度系統(tǒng),我們可以隨便創(chuàng)建調(diào)度任務(wù)。這里我示范一個創(chuàng)建一個每分鐘定時請求 http://t.weather.itboy.net/api/weather/city/101280101 鏈接獲取廣州天氣的任務(wù)。參考:免費天氣API,天氣JSON API,不限次數(shù)獲取十五天的天氣預報
登錄進入任務(wù)管理頁面新建任務(wù)
訪問,http://127.0.0.1:8080/xxl-job-admin ,輸入 admin/123456 。登錄上面我們搭建成功的xxl-job的分布式調(diào)度系統(tǒng)。然后進入"任務(wù)管理" 頁面,進行新建任務(wù),

填寫任務(wù)的基本信息
這里填寫的是調(diào)度任務(wù)的基本信息,例如:任務(wù)失敗的時候重試的次數(shù),該任務(wù)的負責人、應該依賴的上一個任務(wù)id。
在彈出的新建任務(wù)的窗口,按照如下填寫:
編輯任務(wù)的具體執(zhí)行的內(nèi)容
我們可以通過xxl-job 自帶的 IDE 來編輯我們需要運行的shell腳本。
按照上面填寫好任務(wù)的基本信息后,我們接著來編輯要執(zhí)行的任務(wù)腳本,

啟動任務(wù)并查詢執(zhí)行記錄
點擊保存,然后返回任務(wù)列表,啟動該任務(wù)。然后就可以到"調(diào)度日志"頁面,查看該任務(wù)的執(zhí)行記錄了,點擊具體運行的某個實例的“查看日志”能看到該實例執(zhí)行記錄的詳細日志信息。
總結(jié)
本篇文章介紹了分布式調(diào)度任務(wù)系統(tǒng) xxl-job 的安裝 和簡單使用。其實整篇下來,我覺得挺水的??;算作當做自己記錄一下吧,這個分布式調(diào)度系統(tǒng)的,其實功能挺簡單的,如果運行比較少的任務(wù)的會比較輕松和容易上手。不過如果要運行一些復雜的任務(wù),特別是包含一些例如,按小時匯總到天 然后觸發(fā)依賴 之類邏輯較多的依賴或者是想延遲執(zhí)行、指定重跑某個數(shù)據(jù)時間的實例 等等復雜邏輯,就比較困難了。另外這個分布式開源的調(diào)度系統(tǒng)的任務(wù)實例界面和任務(wù)管理界面的交互并不是很好,都是展示成列表的形式。如果把任務(wù)實例界面修改為按照單元格日期 這樣來選擇會比較好些。因為我們公司也有類似這樣的分布式調(diào)度系統(tǒng),不過我們公司的由于業(yè)務(wù)比較復雜,所以我們的分布式調(diào)度任務(wù)系統(tǒng)的功能比較多,相對于 xxl-job 有一定優(yōu)勢,但是也有挺多缺點的。
總而言之,對于絕大部分中小公司的調(diào)度任務(wù)或者是比較簡單的調(diào)度任務(wù)用xxl-job 是完全沒有問題的。如果是要作為企業(yè)級系統(tǒng)來使用估計還需要基于 xxl-job 來修改挺多模塊的。最后,還是挺感謝 xxl-job 能開源,對于我平常用來管理一下自己的調(diào)度任務(wù)也很不錯??。