最火的分散式調度系統 XXL-JOB 安裝和簡單使用
- 2020 年 12 月 21 日
- 筆記
唉,在談文章之前先說一下自己的情況。原計劃是在上周六寫完這篇文章的,然而周六的時候打開電腦的,按照平常”慣例”,先補一些 「黑色五葉草」/「進巨」的番,然後刷著刷著就忘記寫😔,接著就逛逛知乎,逛逛b站。啪地一下,趁我不注意🙃,周六日就過去,於是就拖到了這周才來更新(立下的flag總是被自己打倒🤐)。這周六日我有也有寫部分,不過發現做一個這樣的教程類文章也是挺耗時間(這篇文章差不多耗了我兩個周末的時間),要先自己搭建完好之後,然後把其中每一步的操作都記錄下來,相當於為了寫這篇文章,我搭了2,3次 xxl-job 🤣。 不過寫完之後,感覺對於自己收穫也挺大的,順便複習了一下 Shell 的相關命令和 Java 項目的命令行啟動。以後還是要加油啊!盡量堅持周更!向著大神們學習。
上一個篇文章 分散式調度任務系統調研及選型,我們介紹了常用的一些開源的分散式調度系統,知道了xxl-job
目前基本是中小型公司的第一選擇。所以這篇文章,就來介紹一下xxl-job
的安裝和簡單使用。
這裡安裝是基於 Ubuntu 16.04 安裝的。
另外我可沒有標題黨,我看了一下 GitHub 上開源的分散式調度系統,目前是 xxl-job 項目是分散式調度開源系統中最多 starts 的(當然也有可能因為這個 xxl-job 出來挺久了)
window ,mac 或docker 安裝
如果為 window,mac 等安裝,可以先根據github 上的 SQL 腳本創建好資料庫和表,然後直接將github 上的源碼 導入到 idea 按照Spring Boot 應用來啟動即可。
如果為 docker 的安裝,可以直接pull 官方鏡像,然後運行時指定 MySQL 和存儲日誌目錄即可。
下載鏡像
# Docker地址://hub.docker.com/r/xuxueli/xxl-job-admin/ (建議指定版本號)
docker pull xuxueli/xxl-job-admin
創建容器並運行
# 如需自定義 mysql 等配置,可通過 "-e PARAMS" 指定,參數格式 PARAMS="--key=value --key2=value2" ;
# 配置項參考文件:/xxl-job/xxl-job-admin/src/main/resources/application.properties
# 如需自定義 JVM記憶體參數 等配置,可通過 "-e JAVA_OPTS" 指定,參數格式 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 打包構建成運行包,然後才能運行。所以接下來我來詳細講述一下如何再linux 下安裝啟動 xxl-job,這裡使用的 linux 版本為:Ubuntu 16.04。 其他版本也類似。
安裝 jdk ,maven ,git 環境
首先我們先需要安裝 Java 相關的環境,因為xxl-job 是 Java 開發的,在沒有提供啟動包的基礎上,我們需要自己從源碼解釋編譯成啟動包,然後啟動。
安裝 JDK
安裝有兩種一種是直接根據 apt 的包安裝,另一種是手動獲取 java 包安裝。這裡我們為了簡單起見使用 apt 直接安裝,如果需要更多自定義的配置可以手動安裝。執行運行以下兩個命令即可安裝 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 的默認的遠程倉庫地址換成 中國的遠程倉庫地址,不然下載 maven 依賴的時候會很慢。打開 /etc/maven/settings.xml
文件,在
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>//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
安裝資料庫
初始化資料庫的腳步為xxl-job的git 項目中的 /xxl-job/doc/db/tables_xxl_job.sql
的文件,在已經安裝了 MySQL 的機器上連接上,然後執行即可
默認xxl-job 是支援集群部署的,只要連接相同的資料庫即可
另外如果 MySQL 有做主從部署,則 xxl-job 連接的一定要為主庫,也不能使用讀寫分離的帳號,否則在調度的時候可能會出現問題
git clone 源碼文件,打包構建
git clone //gitee.com/xuxueli0323/xxl-job.git
cd xxl-job/
mvn -B -Dmaven.test.skip=true clean package
cd xxl-job-admin/target
# 這裡 根據不同的xxl-job的版本,文件名不一樣
unzip xxl-job-admin-2.3.0-SNAPSHOT.jar
# 解壓之後,進入BOOT-INT/target/class/ 目錄即可看到調度中心的配置文件 `application.properties`,修改裡面的資料庫鏈接和密碼即可,如果考慮調度系統的調用的安全性可以加上, xxl.job.accessToken= 參數
# 修改完成之後,然後進入到 /xxl-job/xxl-job-admin/target 目錄下執行以下命令來啟動 xxl-job
/usr/local/java/bin/java -classpath ./:./lib/* org.springframework.boot.loader.JarLauncher &
執行之後,如果啟動成功會顯示如下圖這樣
然後打開鏈接: //127.0.0.1:8080/xxl-job-admin (該地址執行器將會使用到,作為回調地址)
輸入默認的帳號和密碼, 「admin/123456」,登錄即可看到調度中心。(需要將127.0.0.1 換成自己的機器的ip)
安裝執行器項目
安裝完成調度中心之後,我們還需要安裝執行器項目,調度中心本身是不負責執行項目,要安裝執行器之後,才能通過調度中心去執行器服務上執行。安裝執行器項目很簡單,基本上就是安裝調度中心那樣安裝啟動即可,我們這裡為了簡單起見,可以直接啟動 xxl-job 自帶Spring Boot的簡單執行器。基於上面克隆下來的項目,我們進入 /xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/target
目錄。如果要修改調度中心的地址的資訊、調度中心的驗證的key等,可以修改配置文件,該執行器的配置文件為 /xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/target/BOOT-INF/classes/application.properties
。
然後執行以下命令即可啟動執行器項目:
/usr/local/java/bin/java -classpath ./:./lib/* org.springframework.boot.loader.JarLauncher &
簡單使用 xxl-job
經過上面的步驟,我們就有一個簡單的調度中心系統了。基於這個調度系統,我們可以隨便創建調度任務。這裡我示範一個創建一個每分鐘定時請求 //t.weather.itboy.net/api/weather/city/101280101 鏈接獲取廣州天氣的任務。參考:免費天氣API,天氣JSON API,不限次數獲取十五天的天氣預報
登錄進入任務管理頁面新建任務
訪問,//127.0.0.1:8080/xxl-job-admin ,輸入 admin/123456 。登錄上面我們搭建成功的xxl-job的分散式調度系統。然後進入”任務管理” 頁面,進行新建任務,
填寫任務的基本資訊
這裡填寫的是調度任務的基本資訊,例如:任務失敗的時候重試的次數,該任務的負責人、應該依賴的上一個任務id。
在彈出的新建任務的窗口,按照如下填寫:
編輯任務的具體執行的內容
我們可以通過xxl-job 自帶的 IDE 來編輯我們需要運行的shell腳本。
按照上面填寫好任務的基本資訊後,我們接著來編輯要執行的任務腳本,
啟動任務並查詢執行記錄
點擊保存,然後返回任務列表,啟動該任務。然後就可以到”調度日誌”頁面,查看該任務的執行記錄了,點擊具體運行的某個實例的「查看日誌」能看到該實例執行記錄的詳細日誌資訊。
總結
本篇文章介紹了分散式調度任務系統 xxl-job 的安裝 和簡單使用。其實整篇下來,我覺得挺水的😅;算作當做自己記錄一下吧,這個分散式調度系統的,其實功能挺簡單的,如果運行比較少的任務的會比較輕鬆和容易上手。不過如果要運行一些複雜的任務,特別是包含一些例如,按小時匯總到天 然後觸發依賴 之類邏輯較多的依賴或者是想延遲執行、指定重跑某個數據時間的實例 等等複雜邏輯,就比較困難了。另外這個分散式開源的調度系統的任務實例介面和任務管理介面的交互並不是很好,都是展示成列表的形式。如果把任務實例介面修改為按照單元格日期 這樣來選擇會比較好些。因為我們公司也有類似這樣的分散式調度系統,不過我們公司的由於業務比較複雜,所以我們的分散式調度任務系統的功能比較多,相對於 xxl-job 有一定優勢,但是也有挺多缺點的。
總而言之,對於絕大部分中小公司的調度任務或者是比較簡單的調度任務用xxl-job 是完全沒有問題的。如果是要作為企業級系統來使用估計還需要基於 xxl-job 來修改挺多模組的。最後,還是挺感謝 xxl-job 能開源,對於我平常用來管理一下自己的調度任務也很不錯😊。