分散式任務調度平台XXL-JOB安裝及使用
一、為什麼需要任務調度平台
在Java中,傳統的定時任務實現方案,比如Timer,Quartz等都或多或少存在一些問題:
- 不支援集群、不支援統計、沒有管理平台、沒有失敗報警、沒有監控等等而且在現在分散式的架構中,有一些場景需要分散式任務調度:
- 同一個服務多個實例的任務存在互斥時,需要統一的調度。任務調度需要支援高可用、監控、故障告警。
- 需要統一管理和追蹤各個服務節點任務調度的結果,需要記錄保存任務屬性資訊等。顯然傳統的定時任務已經不滿足現在的分散式架構,所以需要一個分散式任務調度平台,目前比較主流的是elasticjob和xxl-job。
二、為什麼選擇XXL-JOB
xxl-job中心式的調度平台輕量級,開箱即用,操作簡易,上手快,與SpringBoot有非常好的集成,而且監控介面就集成在調度中心,介面又簡潔,對於企業維護起來成本不高,還有失敗的郵件告警等等。這就使很多企業選擇xxl-job做調度平台。
三、快速入門
具體安裝參照官方文檔,官方是最靠譜的
//www.xuxueli.com/xxl-job/
這裡主要記錄一下XXL-JOB有2塊,
一是調度中心,需要配置,建議獨立部署
- 參考其官方demo調度中心項目:xxl-job-admin
- 作用:統一管理任務調度平台上調度任務,負責觸發調度執行,並且提供任務管理平台。
參考其官方文檔 2.3 配置部署「調度中心」
另一塊就是 【執行器】,參考官方文檔 2.4 配置部署「執行器項目」
- 「執行器」項目:xxl-job-executor-sample-springboot (提供多種版本執行器供選擇,現以 springboot 版本為例,可直接使用,也可以參考其並將現有項目改造成執行器)
- 作用:負責接收「調度中心」的調度並執行;可直接部署執行器,也可以將執行器集成到現有業務項目中。
在你的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,部署簡單、學習成本低!