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