【问题标题】:How does quartz ensure that only one of the nodes runs the job石英如何确保只有一个节点运行作业
【发布时间】:2019-03-26 11:13:34
【问题描述】:

我想知道 Quartz 如何确保集群中只有一个节点运行特定的作业。我知道可以通过在quartz.properties 中设置一些属性来完成,比如JobStoreTX 等,但是支持它的内部实现是什么?

【问题讨论】:

    标签: java quartz-scheduler quartz


    【解决方案1】:

    quartz中的Clustering是使用数据库完成的,所以如果你的job store是JdbcJobStore那么就会发生clustering。

    只有具有相同调度名称和不同 instance_name 的调度程序才能参与并形成集群。

    1个ClusterManager线程将用于管理集群。该线程确保lastcheckin时间以设定的时间间隔更新。如果在设定的时间间隔内有任何不匹配,则认为实例已关闭。

    2 Quartz 使用标准锁信号量进行 Quartz 实例的数据库级聚类

    StdRowLockSemaphore
    

    在此类中,quartz 使用

    对行进行悲观锁定
    select * from {}_Lock for update 
    
    

    如果您在完成触发器触发后检查 JobStoreSupport 类,则将通过完成事务来释放行锁。 因此,如果两个调度程序实例将针对同一个触发器完成,那么只有一个能够成功。

    希望这可以帮助您连接点。

    【讨论】:

      猜你喜欢
      • 2010-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-07
      相关资源
      最近更新 更多