石英。工作商店TX。触发器由两个节点同时触发

Quartz. JobStoreTX. The trigger is fired by two nodes simultaneously

我有两个节点具有相同的 Quartz 调度程序。 JobStore 有唯一的作业触发器,每 5 秒执行一次,处理作业需要一秒钟。

当我的一个节点启动时,一切正常。当第二个节点初始化它的 Quartz 调度程序时,它将 ACQUIRED(由第一个节点)触发器的状态更改为 WAITING,然后 "picks it up" 执行(状态然后再次更改为 ACQUIRED)。

因此 作业由两个节点同时执行一次,然后唯一的节点继续执行作业(这是预期的行为)。 如何为整个集群实施适当的行为?谢谢。

通过为 属性“org.quartz.scheduler.instanceId”指定不同的值解决了这个问题(也可以使用值 "AUTO")。

它有默认值"NON_CLUSTERED",所以在初始化第二个节点后,Quartz 认为它正在重新初始化失败的节点,所以它释放了与该节点关联的所有作业以重新获取它们.