分散式任務調度平台XXL-JOB安裝及使用

一、為什麼需要任務調度平台

在Java中,傳統的定時任務實現方案,比如Timer,Quartz等都或多或少存在一些問題:

  • 不支援集群、不支援統計、沒有管理平台、沒有失敗報警、沒有監控等等而且在現在分散式的架構中,有一些場景需要分散式任務調度:
  • 同一個服務多個實例的任務存在互斥時,需要統一的調度。任務調度需要支援高可用、監控、故障告警。
  • 需要統一管理和追蹤各個服務節點任務調度的結果,需要記錄保存任務屬性資訊等。顯然傳統的定時任務已經不滿足現在的分散式架構,所以需要一個分散式任務調度平台,目前比較主流的是elasticjob和xxl-job。

二、為什麼選擇XXL-JOB

xxl-job中心式的調度平台輕量級,開箱即用,操作簡易,上手快,與SpringBoot有非常好的集成,而且監控介面就集成在調度中心,介面又簡潔,對於企業維護起來成本不高,還有失敗的郵件告警等等。這就使很多企業選擇xxl-job做調度平台。

三、快速入門

具體安裝參照官方文檔,官方是最靠譜的
//www.xuxueli.com/xxl-job/

這裡主要記錄一下XXL-JOB有2塊,

一是調度中心,需要配置,建議獨立部署

  1. 參考其官方demo調度中心項目:xxl-job-admin
  2. 作用:統一管理任務調度平台上調度任務,負責觸發調度執行,並且提供任務管理平台。

參考其官方文檔 2.3 配置部署「調度中心」

另一塊就是 【執行器】,參考官方文檔 2.4 配置部署「執行器項目」

  1. 「執行器」項目:xxl-job-executor-sample-springboot (提供多種版本執行器供選擇,現以 springboot 版本為例,可直接使用,也可以參考其並將現有項目改造成執行器)
  2. 作用:負責接收「調度中心」的調度並執行;可直接部署執行器,也可以將執行器集成到現有業務項目中。

在你的springboot業務項目中,引入這個xxl-job-executor-sample-springboot模組就可以了
執行器支援集群部署,提升調度系統可用性,同時提升任務處理能力。
執行器集群部署時,幾點要求和建議:

  • 執行器回調地址(xxl.job.admin.addresses)需要保持一致;執行器根據該配置進行執行器自動註冊等操作。
  • 同一個執行器集群內AppName(xxl.job.executor.appname)需要保持一致;調度中心根據該配置動態發現不同集群的在線執行器列表。

四、啟動-運行

首先啟動調度中心

這裡我們本地啟動,先創建好資料庫,並且導入官方提供的sql


Run 起來,查看控制台,顯示 success 就啟動成功

打開瀏覽器,輸入後台地址 //localhost:8080/xxl-job-admin, 帳號damin ,密碼默認是123456

啟動執行器

這裡我們啟動2個,測試下集群的任務運行情況:
先打開一個執行器的配置文件application.properties

8082就是複製的第二個執行器,程式碼相同,改一下埠
xxl.job.admin.addresses,填寫你上面調度中心的地址
xxl.job.accessToken,調度中心如果配置了就要寫,沒有寫就默認空著
xxl.job.executor.appname,執行器名稱,官網文檔說了如果集群,appname要一致

兩個執行器都跑起來:
8081

8082

回到後台調度中心後台,2個執行器已經自動註冊

運行任務

前提:在執行器中,都有已經寫好了定時任務,我們用的官網demo,裡面已經有寫好的方法了

回到調度中心的任務管理,

我們編輯此任務,將路由策略改為輪詢:

保存後,執行一次,看看效果:

查看控制台,8082列印了日誌,說明8082運行了任務,8081沒有執行,因為我們執行路由策略是輪詢,並且保證這個任務只能被執行一次

再執行一次,8081 執行了

以上就是這次對XXL-JOB的一次學習和總結,以後如果有集群部署的地方,就不要再去使用springboot的Quartz這種只適合單體項目的定時任務了,如果不手動去處理,多個服務會重複執行,可以考慮使用XXL-JOB,部署簡單、學習成本低!

Tags: