xxl-job一致性

                                                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的排他锁(悲观锁)

当任务处理完毕后,释放 悲观锁,准备等待下一次循环。

原文地址:https://www.cnblogs.com/wanghongsen/p/12504490.html