我在我的应用程序中配置了quartz.它适用于集群,我可以看到集群节点一次触发一个作业.但是,我有一个关于负载平衡算法如何在石英中工作的问题.我想知道在jdbcJobstore代码中的哪一点,节点获取无法获取锁的信息.特定群集节点如何获取锁以在代码中触发作业?
Quartz不使用显式负载平衡.会发生什么是单个集群的Quartz调度程序实例竞争执行作业.当时间到来并且应该执行作业时,各个调度程序实例会尝试在配置的作业存储数据库的QRTZ_LOCKS表中创建数据库行锁.设法创建数据库行锁的实例将获胜并执行该作业.另一个调度程序获得SQL异常并放弃.
您可以推断,Quartz中的负载平衡非常简单,因为具有较高负载的节点"不太可能"成为第一个成功创建数据库锁定的节点.这显然假设时间在所有集群Quartz实例上正确同步.
如果您对数组行锁定在Quartz中的工作方式感兴趣,可以查看DBSemaphore API.