天天看點

sqlserver 暫停在執行的job_分布式任務排程xxl-job

前言碎語

在單機應用時期,任務排程一般都是基于spring schedule和內建quartz來實作的,當系統發展成分布式服務,應用多執行個體的時候,任務就會出現多次調用的問題,很多時候我們任務并不需要跑多次。解決方案有很多,最最簡單粗暴的就是可以設定應用開關。其次就是集中式話任務管理排程。當然,quartz也有叢集模式,但是基于api控制并不直覺。下面介紹一個集中式的分布式任務排程架構,可以很友善的解決分布式任務排程的問題

一,xxl-job簡介

XXL-JOB是一個輕量級分布式任務排程架構,其核心設計目标是開發迅速、學習簡單、輕量級、易擴充。現已開放源代碼并接入多家公司線上産品線,開箱即用。功能如下

1、簡單:支援通過Web頁面對任務進行CRUD操作,操作簡單,一分鐘上手;

2、動态:支援動态修改任務狀态、暫停/恢複任務,以及終止運作中任務,即時生效;

3、排程中心HA(中心式):排程采用中心式設計,“排程中心”基于叢集Quartz實作,可保證排程中心HA;

4、執行器HA(分布式):任務分布式執行,任務"執行器"支援叢集部署,可保證任務執行HA;

5、任務Failover:執行器叢集部署時,任務路由政策選擇"故障轉移"情況下排程失敗時将會平滑切換執行器進行Failover;

6、一緻性:“排程中心”通過DB鎖保證叢集分布式排程的一緻性, 一次任務排程隻會觸發一次執行;

7、自定義任務參數:支援線上配置排程任務入參,即時生效;

8、排程線程池:排程系統多線程觸發排程運作,確定排程精确執行,不被堵塞;

9、彈性擴容縮容:一旦有新執行器機器上線或者下線,下次排程時将會重新配置設定任務;

10、郵件報警:任務失敗時支援郵件報警,支援配置多郵件位址群發報警郵件;

11、狀态監控:支援實時監控任務進度;

12、Rolling執行日志:支援線上檢視排程結果,并且支援以Rolling方式實時檢視執行器輸出的完整的執行日志;

13、GLUE:提供Web IDE,支援線上開發任務邏輯代碼,動态釋出,實時編譯生效,省略部署上線的過程。支援30個版本的曆史版本回溯。

14、資料加密:排程中心和執行器之間的通訊進行資料加密,提升排程資訊安全性;

15、任務依賴:支援配置子任務依賴,當父任務執行結束且執行成功後将會主動觸發一次子任務的執行, 多個子任務用逗号分隔;

16、推送maven中央倉庫: 将會把最新穩定版推送到maven中央倉庫, 友善使用者接入和使用;

17、任務注冊: 執行器會周期性自動注冊任務, 排程中心将會自動發現注冊的任務并觸發執行。同時,也支援手動錄入執行器位址;

18、路由政策:執行器叢集部署時提供豐富的路由政策,包括:第一個、最後一個、輪詢、随機、一緻性HASH、最不經常使用、最近最久未使用、故障轉移、忙碌轉移等;

19、運作報表:支援實時檢視運作資料,如任務數量、排程次數、執行器數量等;以及排程報表,如排程日期分布圖,排程成功分布圖等;

20、腳本任務:支援以GLUE模式開發和運作腳本任務,包括Shell、Python等類型腳本;

21、阻塞處理政策:排程過于密集執行器來不及處理時的處理政策,政策包括:單機串行(預設)、丢棄後續排程、覆寫之前排程;

22、失敗處理政策;排程失敗時的處理政策,政策包括:失敗告警(預設)、失敗重試;

23、分片廣播任務:執行器叢集部署時,任務路由政策選擇"分片廣播"情況下,一次任務排程将會廣播觸發叢集中所有執行器執行一次任務,可根據分片參數開發分片任務;

24、動态分片:分片廣播任務以執行器為次元進行分片,支援動态擴容執行器叢集進而動态增加分片數量,協同進行業務處理;在進行大資料量業務操作時可顯著提升任務處理能力和速度。

25、事件觸發:除了"Cron方式"和"任務依賴方式"觸發任務執行之外,支援基于事件的觸發任務方式。排程中心提供觸發任務單次執行的API服務,可根據業務事件靈活觸發。

二、部署:

見項目位址為:https://github.com/xuxueli/xxl-job

三、 開發第一個任務“Hello World”

本示例以建立一個 “GLUE模式(Java)” 運作模式的任務為例。更多有關任務的詳細配置,請檢視“章節三:任務詳解”。 ( “GLUE模式(Java)”的執行代碼托管到排程中心線上維護,相比“Bean模式任務”需要在執行器項目開發部署上線,更加簡便輕量)

前提:請确認“排程中心”和“執行器”項目已經成功部署并啟動;

步驟一:建立任務:

sqlserver 暫停在執行的job_分布式任務排程xxl-job
sqlserver 暫停在執行的job_分布式任務排程xxl-job

步驟二:“GLUE模式(Java)” 任務開發:

請點選任務右側 “GLUE” 按鈕,進入 “GLUE編輯器開發界面” ,見下圖。“GLUE模式(Java)” 運作模式的任務預設已經初始化了示例任務代碼,即列印Hello World。 ( “GLUE模式(Java)” 運作模式的任務實際上是一段繼承自IJobHandler的Java類代碼,它在執行器項目中運作,可使用@Resource/@Autowire注入執行器裡中的其他服務)

sqlserver 暫停在執行的job_分布式任務排程xxl-job

步驟三:觸發執行:

請點選任務右側 “執行” 按鈕,可手動觸發一次任務執行(通常情況下,通過配置Cron表達式進行任務排程出發)。

步驟四:檢視日志:

請點選任務右側 “日志” 按鈕,可前往任務日志界面檢視任務日志。 在任務日志界面中,可檢視該任務的曆史排程記錄以及每一次排程的任務排程資訊、執行參數和執行資訊。運作中的任務點選右側的“執行日志”按鈕,可進入日志控制台檢視實時執行日志。

sqlserver 暫停在執行的job_分布式任務排程xxl-job