01.29 你應該知道的任務調度平臺 XXL-JOB

背景

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


介紹

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

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

調度中心搭建

從release拉取最新代碼

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


你應該知道的任務調度平臺 XXL-JOB


配置log4j.xml中日誌的路徑


你應該知道的任務調度平臺 XXL-JOB


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

執行器配置

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

<code>
<dependency>
<groupid>com.xuxueli/<groupid>
<artifactid>xxl-job-core/<artifactid>
<version>1.9.0/<version>
/<dependency>

/<code>

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


你應該知道的任務調度平臺 XXL-JOB


編寫jobHandler,繼承IJobHandler實現內部execute方法,具體的業務邏輯就在這個方法裡面實現。這種方式是通過 Java 代碼來執行定時任務的,除了 JavaBean 方式還支持 Python,nodeJs,Shell 等方式。 我最喜歡的是 Python 方式,因為 Python 在處理簡單的定時任務的時候還是比較得心應手的,而且很快速,但是稍微複雜一點的就不方便了,而且 Python 可以直接在WebIDE 裡面直接粘貼代碼,實現功能,就不用發版本了,但是具體的需要看具體的業務。

<code>
@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;
}
}

/<string>/<code>

新增任務

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

新增執行器

你應該知道的任務調度平臺 XXL-JOB


新增任務

你應該知道的任務調度平臺 XXL-JOB

新增任務的時候需要選擇上一步創建的執行器,選擇運行模式,如果是 JavaBean 方式就配置JobHandler,或者選擇 Python 模式等,然後填上必要的一些信息,如Cron以及一些參數 具體配置可以參考三、任務詳解 這裡的配置項比較多。

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

你應該知道的任務調度平臺 XXL-JOB

小結

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

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


分享到:


相關文章: