xxl-job一致性
xxl-job調度中心為了高可用是分布式部署,即中心化,那么如何保證調度的一致性,不會出現多台機器 同時觸發某一個任務同時執行
請尊重作者勞動成果,轉載請標明原文鏈接:
https://www.cnblogs.com/wanghongsen/p/12504490.html
一 如何保證xxl-job一致性
什么是一致性問題:“調度中心”通過DB鎖保證集群分布式調度的一致性, 一次任務調度只會觸發一次執行
為了避免多個服務器同時調度任務, 通過mysql悲觀鎖實現分布式鎖(for update語句)
二 具體過程:
(可以參看JobScheduleHelper類代碼,關鍵代碼截圖如下)
如上圖所示
1 setAutoCommit(false)關閉隱式自動提交事務,
2 啟動事務select lock for update(顯式排他鎖)
3 讀db任務信息 -> 拉任務到內存時間輪 -> 更新db任務信息
4 commit提交事務,同時會釋放for update的排他鎖(悲觀鎖)
當任務處理完畢后,釋放 悲觀鎖,准備等待下一次循環。