唉艾杏,在談文章之前先說(shuō)一下自己的情況韧衣。原計(jì)劃是在上周六寫完這篇文章的,然而周六的時(shí)候打開電腦的,按照平常"慣例",先補(bǔ)一些 “黑色五葉草”/“進(jìn)巨”的番畅铭,然后刷著刷著就忘記寫??氏淑,接著就逛逛知乎,逛逛b站硕噩。啪地一下假残,趁我不注意??,周六日就過(guò)去炉擅,于是就拖到了這周才來(lái)更新(立下的flag總是被自己打倒??)辉懒。這周六日我有也有寫部分,不過(guò)發(fā)現(xiàn)做一個(gè)這樣的教程類文章也是挺耗時(shí)間(這篇文章差不多耗了我兩個(gè)周末的時(shí)間)谍失,要先自己搭建完好之后眶俩,然后把其中每一步的操作都記錄下來(lái),相當(dāng)于為了寫這篇文章快鱼,我搭了2,3次 xxl-job ??颠印。 不過(guò)寫完之后,感覺對(duì)于自己收獲也挺大的抹竹,順便復(fù)習(xí)了一下 Shell 的相關(guān)命令和 Java 項(xiàng)目的命令行啟動(dòng)嗽仪。以后還是要加油啊柒莉!盡量堅(jiān)持周更闻坚!向著大神們學(xué)習(xí)。
上一個(gè)篇文章 分布式調(diào)度任務(wù)系統(tǒng)調(diào)研及選型兢孝,我們介紹了常用的一些開源的分布式調(diào)度系統(tǒng)窿凤,知道了xxl-job
目前基本是中小型公司的第一選擇。所以這篇文章跨蟹,就來(lái)介紹一下xxl-job
的安裝和簡(jiǎn)單使用雳殊。
這里安裝是基于 Ubuntu 16.04 安裝的。
另外我可沒(méi)有標(biāo)題黨窗轩,我看了一下 GitHub 上開源的分布式調(diào)度系統(tǒng)夯秃,目前是 xxl-job 項(xiàng)目是分布式調(diào)度開源系統(tǒng)中最多 starts 的(當(dāng)然也有可能因?yàn)檫@個(gè) xxl-job 出來(lái)挺久了)
window ,mac 或docker 安裝
如果為 window痢艺,mac 等安裝仓洼,可以先根據(jù)github 上的 SQL 腳本創(chuàng)建好數(shù)據(jù)庫(kù)和表,然后直接將github 上的源碼 導(dǎo)入到 idea 按照Spring Boot 應(yīng)用來(lái)啟動(dòng)即可堤舒。
如果為 docker 的安裝色建,可以直接pull 官方鏡像,然后運(yùn)行時(shí)指定 MySQL 和存儲(chǔ)日志目錄即可舌缤。
下載鏡像
# Docker地址:https://hub.docker.com/r/xuxueli/xxl-job-admin/ (建議指定版本號(hào))
docker pull xuxueli/xxl-job-admin
創(chuàng)建容器并運(yùn)行
# 如需自定義 mysql 等配置箕戳,可通過(guò) "-e PARAMS" 指定某残,參數(shù)格式 PARAMS="--key=value --key2=value2" ;
# 配置項(xiàng)參考文件:/xxl-job/xxl-job-admin/src/main/resources/application.properties
# 如需自定義 JVM內(nèi)存參數(shù) 等配置陵吸,可通過(guò) "-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 會(huì)有點(diǎn)麻煩壮虫, 因?yàn)?xxl-job 并沒(méi)有像 nacos 之類的直接提供了一個(gè)啟動(dòng)包澳厢,直接修改一下配置文件,然后運(yùn)行啟動(dòng)腳本即可那種旨指。xxl-job 是只提供了的源碼文件,如果要運(yùn)行喳整,需要自己先將 java 源碼 通過(guò) maven 打包構(gòu)建成運(yùn)行包谆构,然后才能運(yùn)行。所以接下來(lái)我來(lái)詳細(xì)講述一下如何再linux 下安裝啟動(dòng) xxl-job框都,這里使用的 linux 版本為:Ubuntu 16.04搬素。 其他版本也類似。
安裝 jdk 魏保,maven 熬尺,git 環(huán)境
首先我們先需要安裝 Java 相關(guān)的環(huán)境,因?yàn)閤xl-job 是 Java 開發(fā)的谓罗,在沒(méi)有提供啟動(dòng)包的基礎(chǔ)上粱哼,我們需要自己從源碼解釋編譯成啟動(dòng)包,然后啟動(dòng)檩咱。
安裝 JDK
安裝有兩種一種是直接根據(jù) apt 的包安裝揭措,另一種是手動(dòng)獲取 java 包安裝。這里我們?yōu)榱撕?jiǎn)單起見使用 apt 直接安裝刻蚯,如果需要更多自定義的配置可以手動(dòng)安裝绊含。執(zhí)行運(yùn)行以下兩個(gè)命令即可安裝 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
待安裝完成之后炊汹,運(yùn)行
mvn -v
即可檢查是否安裝成功了
這里安裝了 maven 之后還需要將 maven 的默認(rèn)的遠(yuǎn)程倉(cāng)庫(kù)地址換成 國(guó)內(nèi)的遠(yuǎn)程倉(cāng)庫(kù)地址躬充,不然下載 maven 依賴的時(shí)候會(huì)很慢。打開 /etc/maven/settings.xml
文件讨便,在 <mirrors>標(biāo)簽里面添加以下內(nèi)容,即可將默認(rèn)倉(cāng)庫(kù)替換成阿里云的倉(cāng)庫(kù)充甚。
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
安裝 GIT
我們這里還需要安裝 GIT ,主要是為了可以方便復(fù)制源碼到本機(jī)霸褒,當(dāng)然也可以通過(guò)直接 curl 獲取到文件津坑,然后解壓。不過(guò) git 總是有用傲霸,所以我們這里也安裝了
sudo apt-get -y update
sudo apt-get install git -y
安裝數(shù)據(jù)庫(kù)
初始化數(shù)據(jù)庫(kù)的腳步為xxl-job的git 項(xiàng)目中的 /xxl-job/doc/db/tables_xxl_job.sql
的文件疆瑰,在已經(jīng)安裝了 MySQL 的機(jī)器上連接上眉反,然后執(zhí)行即可
默認(rèn)xxl-job 是支持集群部署的,只要連接相同的數(shù)據(jù)庫(kù)即可
另外如果 MySQL 有做主從部署穆役,則 xxl-job 連接的一定要為主庫(kù)寸五,也不能使用讀寫分離的賬號(hào),否則在調(diào)度的時(shí)候可能會(huì)出現(xiàn)問(wè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
# 解壓之后,進(jìn)入BOOT-INT/target/class/ 目錄即可看到調(diào)度中心的配置文件 `application.properties`淹接,修改里面的數(shù)據(jù)庫(kù)鏈接和密碼即可十性,如果考慮調(diào)度系統(tǒng)的調(diào)用的安全性可以加上, xxl.job.accessToken= 參數(shù)
# 修改完成之后,然后進(jìn)入到 /xxl-job/xxl-job-admin/target 目錄下執(zhí)行以下命令來(lái)啟動(dòng) xxl-job
/usr/local/java/bin/java -classpath ./:./lib/* org.springframework.boot.loader.JarLauncher &
執(zhí)行之后塑悼,如果啟動(dòng)成功會(huì)顯示如下圖這樣
然后打開鏈接: http://127.0.0.1:8080/xxl-job-admin (該地址執(zhí)行器將會(huì)使用到劲适,作為回調(diào)地址)
輸入默認(rèn)的賬號(hào)和密碼, “admin/123456”厢蒜,登錄即可看到調(diào)度中心霞势。(需要將127.0.0.1 換成自己的機(jī)器的ip)
安裝執(zhí)行器項(xiàng)目
安裝完成調(diào)度中心之后,我們還需要安裝執(zhí)行器項(xiàng)目斑鸦,調(diào)度中心本身是不負(fù)責(zé)執(zhí)行項(xiàng)目愕贡,要安裝執(zhí)行器之后,才能通過(guò)調(diào)度中心去執(zhí)行器服務(wù)上執(zhí)行巷屿。安裝執(zhí)行器項(xiàng)目很簡(jiǎn)單固以,基本上就是安裝調(diào)度中心那樣安裝啟動(dòng)即可,我們這里為了簡(jiǎn)單起見嘱巾,可以直接啟動(dòng) xxl-job 自帶Spring Boot的簡(jiǎn)單執(zhí)行器嘴纺。基于上面克隆下來(lái)的項(xiàng)目浓冒,我們進(jìn)入 /xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/target
目錄栽渴。如果要修改調(diào)度中心的地址的信息、調(diào)度中心的驗(yàn)證的key等稳懒,可以修改配置文件闲擦,該執(zhí)行器的配置文件為 /xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/target/BOOT-INF/classes/application.properties
。
然后執(zhí)行以下命令即可啟動(dòng)執(zhí)行器項(xiàng)目:
/usr/local/java/bin/java -classpath ./:./lib/* org.springframework.boot.loader.JarLauncher &
簡(jiǎn)單使用 xxl-job
經(jīng)過(guò)上面的步驟场梆,我們就有一個(gè)簡(jiǎn)單的調(diào)度中心系統(tǒng)了墅冷。基于這個(gè)調(diào)度系統(tǒng)或油,我們可以隨便創(chuàng)建調(diào)度任務(wù)寞忿。這里我示范一個(gè)創(chuàng)建一個(gè)每分鐘定時(shí)請(qǐng)求 http://t.weather.itboy.net/api/weather/city/101280101 鏈接獲取廣州天氣的任務(wù)。參考:免費(fèi)天氣API顶岸,天氣JSON API腔彰,不限次數(shù)獲取十五天的天氣預(yù)報(bào)
登錄進(jìn)入任務(wù)管理頁(yè)面新建任務(wù)
訪問(wèn)叫编,http://127.0.0.1:8080/xxl-job-admin ,輸入 admin/123456 霹抛。登錄上面我們搭建成功的xxl-job的分布式調(diào)度系統(tǒng)搓逾。然后進(jìn)入"任務(wù)管理" 頁(yè)面,進(jìn)行新建任務(wù)杯拐,
填寫任務(wù)的基本信息
這里填寫的是調(diào)度任務(wù)的基本信息霞篡,例如:任務(wù)失敗的時(shí)候重試的次數(shù),該任務(wù)的負(fù)責(zé)人端逼、應(yīng)該依賴的上一個(gè)任務(wù)id朗兵。
在彈出的新建任務(wù)的窗口,按照如下填寫:
編輯任務(wù)的具體執(zhí)行的內(nèi)容
我們可以通過(guò)xxl-job 自帶的 IDE 來(lái)編輯我們需要運(yùn)行的shell腳本顶滩。
按照上面填寫好任務(wù)的基本信息后余掖,我們接著來(lái)編輯要執(zhí)行的任務(wù)腳本,
啟動(dòng)任務(wù)并查詢執(zhí)行記錄
點(diǎn)擊保存诲祸,然后返回任務(wù)列表浊吏,啟動(dòng)該任務(wù)而昨。然后就可以到"調(diào)度日志"頁(yè)面救氯,查看該任務(wù)的執(zhí)行記錄了,點(diǎn)擊具體運(yùn)行的某個(gè)實(shí)例的“查看日志”能看到該實(shí)例執(zhí)行記錄的詳細(xì)日志信息歌憨。
總結(jié)
本篇文章介紹了分布式調(diào)度任務(wù)系統(tǒng) xxl-job 的安裝 和簡(jiǎn)單使用着憨。其實(shí)整篇下來(lái),我覺得挺水的??务嫡;算作當(dāng)做自己記錄一下吧甲抖,這個(gè)分布式調(diào)度系統(tǒng)的,其實(shí)功能挺簡(jiǎn)單的心铃,如果運(yùn)行比較少的任務(wù)的會(huì)比較輕松和容易上手准谚。不過(guò)如果要運(yùn)行一些復(fù)雜的任務(wù),特別是包含一些例如去扣,按小時(shí)匯總到天 然后觸發(fā)依賴 之類邏輯較多的依賴或者是想延遲執(zhí)行柱衔、指定重跑某個(gè)數(shù)據(jù)時(shí)間的實(shí)例 等等復(fù)雜邏輯,就比較困難了愉棱。另外這個(gè)分布式開源的調(diào)度系統(tǒng)的任務(wù)實(shí)例界面和任務(wù)管理界面的交互并不是很好唆铐,都是展示成列表的形式。如果把任務(wù)實(shí)例界面修改為按照單元格日期 這樣來(lái)選擇會(huì)比較好些奔滑。因?yàn)槲覀児疽灿蓄愃七@樣的分布式調(diào)度系統(tǒng)艾岂,不過(guò)我們公司的由于業(yè)務(wù)比較復(fù)雜,所以我們的分布式調(diào)度任務(wù)系統(tǒng)的功能比較多朋其,相對(duì)于 xxl-job 有一定優(yōu)勢(shì)王浴,但是也有挺多缺點(diǎn)的脆炎。
總而言之,對(duì)于絕大部分中小公司的調(diào)度任務(wù)或者是比較簡(jiǎn)單的調(diào)度任務(wù)用xxl-job 是完全沒(méi)有問(wèn)題的叼耙。如果是要作為企業(yè)級(jí)系統(tǒng)來(lái)使用估計(jì)還需要基于 xxl-job 來(lái)修改挺多模塊的腕窥。最后,還是挺感謝 xxl-job 能開源筛婉,對(duì)于我平常用來(lái)管理一下自己的調(diào)度任務(wù)也很不錯(cuò)??簇爆。