基于ThreadPoolTaskScheduler 的輕量級任務調度 實現頁面調度

一、傳統任務調度

基于Scheduled注解的任務調度 將cron表達式寫在任務執行的方法上,具體如下:
@Scheduled(cron = "30 59 * * * ?") 定義一個按時間執行的定時任務,在每小時59:30執行一次。
@Scheduled(fixedRate = 1000 * 60) 定義一個按一定頻率執行的定時任務,每隔1分鐘執行一次
@Scheduled(fixedRate = 1000 * 60,initialDelay = 1000) 定義一個按一定頻率執行的定時任務,每隔1分鐘執行一次,延遲1秒執行

執行原理:
https://blog.csdn.net/lwjdear/article/details/77991229

二、需求: 需要動態維護任務(維護頁面)

架構思路

執行頁面


操作頁面

實現思路:

1、初始化任務:數據庫維護一份任務列表,維護內容包括:任務bean、 任務methed、任務cron、任務模塊類型。每種服務器初始化時,只需將自己模塊的任務加入到任務隊列中即可,按計劃執行。
2、前后端交互: 用戶在頁面CRUD、開關任務等操作,在修改數據庫相關內容后,將操作內容發送到MQ中,各服務器訂閱自己服務模塊類型相關的MQ消息即可,這里的MQ分發消息的方式是廣播(即 所有服務器都可拿到任務修改的消息,并針對消息內容對任務隊列做出對應CRUD)。
3、任務開始執行:由于是在分布式環境下執行,而且需要保證一個任務只執行一次,為避免重復執行,這里加了zk競鎖的操作,并且不釋放(意味著只要在一臺服務器上執行了以后,那么后面的任務執行全部都在同一臺機器上,其他機器只能等待競鎖,可以保證在某執行任務的服務器掛掉以后,其他同模塊下的服務器可以立即頂上,繼續執行任務)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容