Quartz-ClusterManager集群管理

  • Post author:
  • Post category:其他


转载请注明出处:

https://www.cnblogs.com/Dorae/p/9357180.html

本文出自:

后端知识点梳理-定时任务Quartz篇章



ClusterManager集群管理线程

每个服务器会定时(org.quartz.jobStore.clusterCheckinInterval这个时间)更新SCHEDULER_STATE表的LAST_CHECKIN_TIME,若这个字段远远超出了该更新的时间,则认为该服务器实例挂了;

注意:每个服务器实例有唯一的id,若配置为AUTO,则为hostname+current_time

线程执行的具体流程:

    • 检查是否有超时的实例failedInstances;
    • 更新该服务器实例的LAST_CHECKIN_TIME;若有超时的实例:
    • 获取STATE_ACCESS锁;
    • 获取超时的实例failedInstances;
    • 获取TRIGGER_ACCESS锁;
    • clusterRecover:

      • 针对每个failedInstances,通过instanceId获取每个实例的firedTriggers;
      • 针对每个firedTrigger:

        • 更新trigger状态:

          • BLOCKED->WAITING
          • PAUSED_BLOCKED->PAUSED
          • ACQUIRED->WAITING
        • 若firedTrigger不是ACQUIRED状态(在执行状态),且jobRequestRecovery=true:

          创建一个SimpleTrigger,存储到trigger表,status=waiting,MISFIRE_INSTR=MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY.
        • 删除firedTrigger



版权声明:本文为WandaZw原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。