在公司也是做基礎架構專案的,所以免不了改造市場上一些優秀的開源元件,今天我們來看看這款定時任務排程中心xxl-job。xxl-job定時任務排程中心是業界非常流行的開源的輕量級分布式定時任務排程平台,最初是由美團點評的大神許雪裡開發的,當然,現在已經有乙個團隊在開發了,而且社群發展的很好,版本也在不斷更新,也有很多優秀的作品,有興趣的可以去xxl專案主頁看看.
在springboot中,我們可以通過@scheduled註解來實現定時任務,但是當部署模式wie分布式,多機部署時,就會出現任務重複執行的問題,當然我們可以通過某些手段來讓它只執行一次,比如redis分布式鎖,這個我們後邊討論。選用乙個定時任務排程中心,不但可以解決分布式的問題,而且它還可以實現動態配置,以及日誌檢視,等一些優秀的功能。
定時任務元件也有許多,但有些顯得過於重量級,比如噹噹開源的elastic-job,功能相對豐富,支援擴充套件多,但重量級的必然會有一些繁瑣的東西,比如部署麻煩,閱讀困難,改造成本相對較大。所以公司業務需求綜合對比之下,前輩選用了xxl-job作為基礎進行改造公升級。
xxl-job的特性如下:
xxl-job在2.0以前的版本底層用的還是基於quartz框架實現的定時任務,而quartz本身就是apache收錄的開源分布式定時任務框架,quartz實現分布式的原理基於資料庫鎖實現的。有興趣的可以檢視看。xxl-job架構如下:job核心模組分為job將後管平台(圖中所示排程中心)和執行jar包(圖中所示執行器),並將它們各自分離,需要使用到定時任務的業務系統首先新增jar包依賴項,然後做一些本地開發配置之後,到排程中心後管上進行配置定時任務相關資訊即可。使用排程平台的乙個好處是可以集中檢視日誌與排程資訊,使得定位問題更加便捷。
後管平台包含quartz模組,也是觸發任務的核心所在,具體執行任務的模組在接入jar包中,它們之間通過tcp進行通訊,其實業務方接入jar包模組實則是在嵌入乙個jetty容器,讓容器與業務應用同時執行。
配置完成後,一次完整的執行示意圖如下:
後管配置任務基本資訊,入庫儲存,儲存quartz觸發的配置資訊
觸發排程:
排程中心拉取任務基本配置資訊,生成排程資訊
載入相應的註冊的執行器執行緒,組建任務觸發資訊,放入佇列等待執行
生成日誌記錄執行緒
根據jobhandler執行客戶端業務邏輯任務
**執行結果
非同步記錄執行日誌資訊,生成日誌檔案
至此,一次完整的任務排程就完成了,基本資訊應該就是如此了,本篇文章沒有深入的去**分析,後續我們我再寫文章認真分析執行流程以及我所改造後的日誌檔案生成體系。
定時任務排程
在業務複雜的應用程式中,有時候會要求乙個或者多個任務在一定的時間或者一定的時間間隔內計畫進行,比如定時備份或同步資料庫,定時傳送電子郵件等,我們稱之為計畫任務。定時任務排程實現方式 但是1,3可以實現在一定時間執行,2只能實現在一定時間間隔執行。1 thread方式 開啟執行緒 public cla...
定時任務配置 乙個簡單的定時任務排程中心設計方案
在日常開發中除了給前端開發介面,還要寫一些定時處理任務,比如乙個活動需要每天定時給所有使用者派發獎勵。乙個成熟服務框架需要乙個全域性的定時任務排程中心,通過定時任務排程中心可以檢視服務有哪些定時任務以及定時任務的執 況,對於執行失敗的定時任務可以手動執行等。我們公司的微服務架構沒有定時任務排程中心,...
Linux定時任務排程
linux定時任務 為當前使用者建立cron服務 1.鍵入 crontab e 編輯crontab服務檔案 例如 檔案內容如下 2 bin sh home admin jiaoben buy deletefile.sh 儲存檔案並並退出 2 bin sh home admin jiaoben buy...