寫在前面的文章
相關知識
什麼是 ElasticJob
ElasticJob 是噹噹網開源的一個分佈式調度解決方案,由兩個相互獨立的子項目 Elastic-Job-Lite 和 Elastic-Job-Cloud 組成。
Elastic-Job-Lite 定位為輕量級無中心化解決方案,使用jar包的形式提供分佈式任務的協調服務;Elastic-Job-Cloud 採用自研 Mesos Framework 的解決方案,額外提供資源治理、應用分發以及進程隔離等功能。
ElasticJob 特性
- 分佈式調度協調
- 彈性擴容縮容
- 失效轉移
- 錯過執行作業重觸發
- 作業分片一致性,保證同一分片在分佈式環境中僅一個執行實例
- 自診斷並修復分佈式不穩定造成的問題
- 支持並行調度
- 支持作業生命週期操作
- 豐富的作業類型
- Spring整合以及命名空間提供
- 運維平臺
官網資料
Elastic-Job官網地址:http://elasticjob.io/index_zh.htmlElastic-Job-Lite官方文檔地址:http://elasticjob.io/docs/elastic-job-lite/00-overview/intro/
目標
整合 ElasticJob,實現定時任務打印輸出
準備工作
安裝 Zookeeper
使用 Docker 進行簡單安裝
拉取鏡像
啟動容器
實戰
第一步:添加依賴
引入 Spring Boot Starter 父工程
添加 elastic-job-lite 的依賴,本文使用的版本是 2.1.5,添加後的整體依賴如下
第二步:配置
因為 SpringBoot 並沒有提供 ElasticJob 的相關 starter,所以配置參數需要我們自行定義
第三步:編寫定時任務執行類
需要實現 SimpleJob 接口
第四步:註冊 Zookeeper
使用前面的配置進行註冊
第五步:註冊定時任務
使用前面創建的 ExampleJob 進行註冊 JobScheduler,並執行其 init 方法。
ElasticJobProperties 類用於支持使用配置文件進行配置,因為使用了默認值,所以在配置文件中並沒有進行相關配置
第六步:驗證
啟動項目,查看日誌
源碼地址
本章源碼 : https://gitee.com/gongm_24/spring-boot-tutorial.git
結束語
將任務加入 Elastic-Job 的步驟就是
擴展
開啟事件追蹤
Elastic-Job-Lite 在提供了 JobEventConfiguration,目前支持數據庫方式配置,操作步驟如下:
需要配置一個數據源,配置之後,對應庫自動創建 JOB_EXECUTION_LOG 和 JOB_STATUS_TRACE_LOG 兩張表以及若干索引。
開啟任務監聽
監聽器分為每臺作業節點均執行和分佈式場景中僅單一節點執行2種。
- 為每臺作業節點均執行的監聽
若作業處理作業服務器的文件,處理完成後刪除文件,可考慮使用每個節點均執行清理任務。此類型任務實現簡單,且無需考慮全局分佈式任務是否完成,請儘量使用此類型監聽器。
第一步:定義監聽器
第二步:將監聽器作為參數傳入 JobScheduler
- 分佈式場景中僅單一節點執行的監聽
若作業處理數據庫數據,處理完成後只需一個節點完成數據清理任務即可。此類型任務處理複雜,需同步分佈式環境下作業的狀態同步,提供了超時設置來避免作業不同步導致的死鎖,請謹慎使用。
第一步:定義監聽器
第二步:將監聽器作為參數傳入JobScheduler
閱讀更多 死牛胖子的技術隨筆 的文章