背景
日常開發(fā)中,我們難免會遇到需要處理一些定時任務(wù),而且這些定時任務(wù)還需要靈活的調(diào)度艾凯,并且在異常的情況下需要做的重試或者報警。這些任務(wù)我們希望能靈活配置懂傀,并且能及時生效趾诗,不需要經(jīng)常發(fā)版本更新代碼。
所以我們希望能有一個這樣的平臺鸿竖,能滿足我們的這些需求。感謝開源社區(qū)铸敏,已經(jīng)有了很好的解決方案缚忧,就是 XXL-JOB。
本文介紹的版本是基于 XXL-JOB的1.9.0版本杈笔,新版本調(diào)度中心 Admin 已經(jīng)切換為 SpringBoot 項目了闪水。
介紹
XXL-JOB是一個輕量級分布式任務(wù)調(diào)度平臺,其核心設(shè)計目標是開發(fā)迅速蒙具、學(xué)習(xí)簡單球榆、輕量級、易擴展〗ぃ現(xiàn)已開放源代碼并接入多家公司線上產(chǎn)品線持钉,開箱即用。
中文文檔地址
XXL-JOB由兩個模塊組成分為調(diào)度中心和執(zhí)行器篱昔,作者許雪里的開源項目每强,感謝大佬。
調(diào)度中心搭建
從release拉取最新代碼
根據(jù)自己的需要配置xxl-job-admin中xxl-job-admin.properties文件中的數(shù)據(jù)源信息以及賬號密碼州刽,以及accessToken和郵件服務(wù)器地址等信息
[站外圖片上傳中...(image-3f958e-1555946604234)]
配置log4j.xml中日志的路徑
[站外圖片上傳中...(image-16b017-1555946604234)]
將xxl-job-admin打包成war包空执,部署到tomcat中即可
執(zhí)行器配置
新建Springboot項目,pom.xml中引入xxl-job的核心庫
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>1.9.0</version>
</dependency>
配置文件中配置調(diào)度中心的地址和一些具體參數(shù)
[站外圖片上傳中...(image-edda2e-1555946604234)]
編寫jobHandler穗椅,繼承IJobHandler實現(xiàn)內(nèi)部execute方法辨绊,具體的業(yè)務(wù)邏輯就在這個方法里面實現(xiàn)。這種方式是通過 Java 代碼來執(zhí)行定時任務(wù)的匹表,除了 JavaBean 方式還支持 Python门坷,nodeJs,Shell 等方式袍镀。
我最喜歡的是 Python 方式拜鹤,因為 Python 在處理簡單的定時任務(wù)的時候還是比較得心應(yīng)手的,而且很快速流椒,但是稍微復(fù)雜一點的就不方便了敏簿,而且 Python 可以直接在WebIDE 里面直接粘貼代碼,實現(xiàn)功能,就不用發(fā)版本了惯裕,但是具體的需要看具體的業(yè)務(wù)温数。
@Service
@JobHandler(value = "demoHandler")
public class DemoHandler extends IJobHandler {
@Override
public ReturnT<String> execute(String s) throws Exception {
XxlJobLogger.log("日志記錄數(shù)據(jù)...");
//do something
return ReturnT.SUCCESS;
}
}
新增任務(wù)
配置好調(diào)度中心并且也成功啟動了執(zhí)行器后,登錄調(diào)度中心新增執(zhí)行器然后就可以配置任務(wù)了
新增執(zhí)行器
[站外圖片上傳中...(image-42eda9-1555946604234)]
新增任務(wù)
[站外圖片上傳中...(image-20ef13-1555946604234)]
新增任務(wù)的時候需要選擇上一步創(chuàng)建的執(zhí)行器蜻势,選擇運行模式撑刺,如果是 JavaBean 方式就配置JobHandler,或者選擇 Python 模式等握玛,然后填上必要的一些信息够傍,如Cron以及一些參數(shù)
具體配置可以參考三、任務(wù)詳解
這里的配置項比較多挠铲。
配置完成后可以如下冕屯,可以手動執(zhí)行,暫停拂苹,查看日志安聘,如果是Python 模式可以直接點擊GLUE
按鈕進去填寫代碼,相關(guān)的代碼也有版本回溯瓢棒,方便回滾浴韭,十分方便。
[站外圖片上傳中...(image-98e66f-1555946604234)]
小結(jié)
整個 XXL—JOB 都是支持分布式部署的脯宿,而且執(zhí)行器也可以配置多個念颈,具體的路由策略也是可以配置的,十分方便连霉。新版本的調(diào)度中心 Admin 已經(jīng)升級為 SpringBoot 項目了舍肠,而且項目本身就攜帶了很多類型的執(zhí)行器可以使用,基本上實現(xiàn)了開箱即用窘面,只要添加自己的業(yè)務(wù)邏輯就可以了翠语。
不過整個 XXL-JOB 有個缺點就是沒有權(quán)限管理,執(zhí)行器沒有實現(xiàn)權(quán)限控制财边,這個目前作者沒有實現(xiàn)肌括,應(yīng)該在后續(xù)的版本中會增加,這個在作者的 todo list 里面酣难,但是具體什么時候?qū)崿F(xiàn)就不知道了谍夭。目前我們這邊項目已經(jīng)在線上跑了差不多一年了,還是比較穩(wěn)定的憨募,而且只是組內(nèi)使用紧索,沒有執(zhí)行器權(quán)限的問題,但是如果要是上升到公司級別菜谣,讓各個組用的話權(quán)限還是一個重要的點珠漂。
題外話
一個理工男程序員晚缩,除了敲代碼之外,還喜歡看書聽音樂寫寫東西媳危。
如果大家喜歡我的文章的話荞彼,歡迎大家轉(zhuǎn)發(fā)評論點贊,你們的喜歡是對我最大的鼓勵待笑。
公眾號:沙漏灑灑鸣皂,主要用來分享技術(shù)和成長感悟,如果喜歡歡迎關(guān)注
博~~客:個人網(wǎng)站