多節點定時任務校準

2021-10-09 18:41:11 字數 1420 閱讀 4494

最近對公司專案做優化,之前的訂閱專案是指定主副節點模式,目前為了迎合市場分布式微服務技術,需改為無主節點概念的模式。

通過查詢資料決定用redisson做分布式鎖,多節點根據持鎖標識決定是否分發任務;

通過redisson是解決了多節分發問題,但是我們專案不是電商秒殺類的專案,是很定時任務分配,還需要解決多節點搶鎖時間的校準。翻翻資料,參考xxl-job做了下符合我們業務場景的校準。

quartz:

定時任務執行時使用資料庫的表鎖,保證乙個任務只能被乙個節點觸發,而表鎖隨著事務的提交或者回滾自動釋放。

xxl-job觸發校準:

xxl-job是基於quartz實現,拿到了距now 5秒內的任務列表資料:schedulelist,分三種情況處理:for迴圈遍歷schedulelist集合

(1)對到達now時間後的任務:(超出now 5秒外):直接跳過不執行; 重置trigger_next_time;

(2)對到達now時間後的任務:(超出now 5秒內):執行緒執行觸發邏輯; 若任務下一次觸發時間是在5秒內, 則放到時間輪內(map> 秒數(1-60) => 任務id列表);

再 重置trigger_next_time;

(3)對未到達now時間的任務:直接放到時間輪內;重置trigger_next_time 。

log.info("*****=《分配任務》開始*****=" + serverutils.gethostipandport());

string key = "redisson_task_key";

try else if((time>(tasktime+5*1000)) &&(time<=(tasktime+3*60*1000)) )

}redisutil.set("_task_time",time+3*60*1000);

try catch (exception e1)

} else

} catch (exception e)

log.info("*****=《分配任務》結束*****=" + serverutils.gethostipandport());

寫的還有點簡單,歡迎大佬指點!

多節點定時任務的同步

現在有兩個或以上的web節點,啟動時,會查詢資料庫,根據資料庫中配置的資料 cron表示式等 建立定時任務。由於期望乙個任務定時只有乙個節點執行,所以需要多個web節點間做master競選,這個已經實現了,身為master的web節點會將定時任務傳送給實際執行的worker節點執行,非master節...

linux定時任務 at定時任務

at命令是一次性定時計畫任務,at的守護程序atd會以後臺模式執行,檢查作業佇列來執行作業。atd守護程序會檢查系統上的乙個特殊目錄來獲取at命令的提交的作業,預設情況下,atd守護程序每60秒檢查一次目錄,有作業時,會檢查作業執行時間,如果時間與當前時間匹配,則執行此作業。注意 at命令是一次性定...

at定時任務

at的守護程序每60秒檢查一次作業佇列,有作業時檢查作業,時間恰好達到,則執行作業。前提 保證atd程序已經啟動,檢查atd程序是否啟動 ps ef grep atd。atd的命令格式 at 選項 時間 ctrl d 結束at命令的輸入。選項 m 任務完成後給使用者傳送郵件,沒有標準輸出。i atg...