【问题标题】:How to add a new Job to a Quartz cluster that needs to start running during the rolling update of the cluster?如何在集群滚动更新期间向需要开始运行的 Quartz 集群添加新的 Job?
【发布时间】:2016-10-20 15:56:59
【问题描述】:

我们在几个应用程序节点上集群化了 Quartz 调度程序运行器。应用节点需要更新,出于高可用性的原因,更新是滚动更新。

与更新一起,我们需要添加一个新作业,并且该作业需要立即开始运行 - 即它不能等到所有节点都已更新。问题是我can't control which node will run the new job,如果其中一个旧节点运行作业,作业实例化将失败(带有 ClassNotFoundException),trigger will be set to the state ERROR 并且作业不会再次运行。

此问题的一种解决方案是进行两次更新:一次在所有节点中添加类,一次添加触发器。反对这种方法的主要原因是我们的操作程序不支持这一点。

那么是否还有一种方法可以安排新作业并通过一次更新使其可靠运行?

【问题讨论】:

    标签: quartz-scheduler


    【解决方案1】:

    我刚刚尝试过,结果发现 Quartz 在尝试获取触发器时得到了 ClassCastException。异常被包装到 JobPersistenceException 中,触发器处于 WAITING 状态。

    因此,尽管这可能会导致其中一个旧节点出现错误日志条目,但 Quartz 不会让触发器处于非工作状态。

    【讨论】:

      猜你喜欢
      • 2015-09-08
      • 1970-01-01
      • 2016-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多