分布式定時任務(wù)Elastic-Job支持手動添加一次性任務(wù)

Elastic-Job

最近用到定時任務(wù),業(yè)務(wù)場景需要支持分布式,雖然Elastic-Job已經(jīng)停更,但基本滿足需求,且該框架已經(jīng)經(jīng)過多個廠家生產(chǎn)驗證,擼了把源碼也感覺框架較輕量容易把控一些,因此基于Elastic-Job-lite實現(xiàn)定時任務(wù)

幾個痛點
  • 存在手動觸發(fā)任務(wù)的場景(雖然后來暫時沒有通過此方式實現(xiàn),本文如果有任何存在漏洞的地方,歡迎拍磚),但是Elastic-Job不支持
  • 希望手動觸發(fā)的任務(wù)仍然可以借助Elastic-Job彈性機制(失效轉(zhuǎn)移和分片機制)
  • 手動觸發(fā)任務(wù)可能是一次性的,即希望在某個任務(wù)執(zhí)行完畢后再觸發(fā)相關(guān)任務(wù)的執(zhí)行,也就是任務(wù)之間存在依賴關(guān)系
  • 希望實時看到任務(wù)的處理情況,也就是elastic-job-lite-console做的事,但是elastic-job-lite-console需要單獨部署直連zookeeper,zookeeper可能在內(nèi)網(wǎng),當然也可以把console部署在內(nèi)網(wǎng),這樣會增加一些維護的麻煩
做了哪些事
  • 增加任務(wù)注解ScheduledTask,減少開發(fā)工作量,開發(fā)同學只需要增加注解配置即可,也支持將任務(wù)配置提升到application.yml等配置文件中,配置文件優(yōu)先級最高
  • 支持手動增加定時任務(wù)(如定時任務(wù)在1分鐘后啟動),通過所有分布式節(jié)點增加zookeeper namespace監(jiān)聽,namespace增加和刪除job結(jié)點時與本jvm運行JobRegistry比對,決定是否增刪job
  • 支持任務(wù)僅執(zhí)行一次,在job parameter中增加runOnce參數(shù),在AbstractDistributeOnceElasticJobListener中監(jiān)聽任務(wù)執(zhí)行情況,當任務(wù)所有分片執(zhí)行完畢后,刪除zookeeper job結(jié)點,關(guān)閉本jvm job及job listener(防止線程數(shù)不斷攀升)
  • 自定義exceptionhandler,方便增加適合于自身業(yè)務(wù)的日志告警
  • 將elastic-job-lite-console融合到本工程,因為console自帶鑒權(quán)機制較弱,建議定時任務(wù)工程需要通過https訪問,或者修改鑒權(quán)機制
  • 增加了一個任務(wù)監(jiān)聽告警機制,如果任務(wù)在cron規(guī)定時間沒有啟動則報警,感覺這個比較雞肋,可以通過參數(shù)關(guān)閉

樣例工程

console

歷史文章:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容