面試應該知道的任務調度平台


背景

日常開發中,我們難免會遇到需要處理一些定時任務,而且這些定時任務還需要靈活的調度,並且在異常的情況下需要做的重試或者報警。這些任務我們希望能靈活配置,並且能及時生效,不需要經常發版本更新代碼。所以我們希望能有一個這樣的平台,能滿足我們的這些需求。感謝開源社區,已經有了很好的解決方案,就是 XXL-JOB。 本文介紹的版本是基於 XXL-JOB 的1.9.0版本,新版本調度中心 Admin 已經切換為 SpringBoot 項目了。

介紹

XXL-JOB[1]是一個輕量級分布式任務調度平台,其核心設計目標是開發迅速、學習簡單、輕量級、易擴展。現已開放源代碼並接入多家公司線上產品線,開箱即用。中文文檔地址[2]

XXL-JOB由兩個模塊組成分為調度中心和執行器,作者許雪里的開源項目,感謝大佬。

調度中心搭建

release[3]拉取最新代碼

根據自己的需要配置 xxl-job-admin 中 xxl-job-admin.properties 文件中的數據源信息以及賬號密碼,以及 accessToken 和郵件服務器地址等信息

配置log4j.xml中日志的路徑

將xxl-job-admin打包成war包,部署到tomcat中即可

執行器配置

新建 Springboot 項目,pom.xml中引入 xxl-job 的核心庫

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

配置文件中配置調度中心的地址和一些具體參數

 

編寫 jobHandler ,繼承 JobHandler 實現內部 execute 方法,具體的業務邏輯就在這個方法里面實現。這種方式是通過Java代碼來執行定時任務的,除了 JavaBean 方式還支持 Python,nodeJs,Shell 等方式。

 

我最喜歡的是 Python 方式,因為 Python 在處理簡單的定時任務的時候還是比較得心應手的,而且很快速,但是稍微復雜一點的就不方便了,而且 Python 可以直接 WebIDE 里面直接粘貼代碼,實現功能,就不用發版本了,但是具體的需要看具體的業務。

 

@Service@JobHandler(value = "demoHandler")public class DemoHandler extends IJobHandler { @Override public ReturnT<String> execute(String s) throws Exception { XxlJobLogger.log("日志記錄數據..."); //do something return ReturnT.SUCCESS; }}

新增任務

配置好調度中心並且也成功啟動了執行器后,登錄調度中心新增執行器然后就可以配置任務了

新增執行器

新增任務

新增任務的時候需要選擇上一步創建的執行器,選擇運行模式,如果是 JavaBean 方式就配置 JobHandler,或者選擇 Python 模式等,然后填上必要的一些信息,如Cron以及一些參數 具體配置可以參考

任務詳解[4] 這里的配置項比較多

置完成后可以如下,可以手動執行,暫停,查看日志,如果是 Python 模式可以直接點擊GLUE按鈕進去填寫代碼,相關的代碼也有版本回溯,方便回滾,十分方便。

小結

整個 XXL—JOB 都是支持分布式部署的,而且執行器也可以配置多個,具體的路由策略也是可以配置的,十分方便。新版本的調度中心 Admin 已經升級為 SpringBoot 項目了,而且項目本身就攜帶了很多類型的執行器可以使用,基本上實現了開箱即用,只要添加自己的業務邏輯就可以了。

不過整個 XXL-JOB 有個缺點就是沒有權限管理,執行器沒有實現權限控制,這個目前作者沒有實現,應該在后續的版本中會增加,這個在作者的 todo list 里面,但是具體什么時候實現就不知道了。目前我們這邊項目已經在線上跑了差不多一年了,還是比較穩定的,而且只是組內使用,沒有執行器權限的問題,但是如果要是上升到公司級別,讓各個組用的話權限還是一個重要的點。

 

Java 極客技術公眾號,是由一群熱愛 Java 開發的技術人組建成立,專注分享原創、高質量的 Java 文章。如果您覺得我們的文章還不錯,請幫忙贊賞、在看、轉發支持,鼓勵我們分享出更好的文章。

 關注公眾號,大家可以在公眾號后台回復“博客園”,免費獲得作者 Java 知識體系/面試必看資料。


免責聲明!

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



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