【问题标题】:Can I inject new jobs into the Quartz JDBCJobStore without clustering enabled?我可以在不启用集群的情况下将新作业注入 Quartz JDBCJobStore 吗?
【发布时间】:2009-11-22 01:36:26
【问题描述】:

我有几个网络服务器,需要它们来使用 Quartz。 Quartz 的集群功能将是理想的,但它要求服务器时钟完全同步。他们对此有一个非常可怕的警告:

永远不要在单独的机器上运行集群,除非它们的时钟使用某种形式的时间同步服务(守护程序)进行同步,这种服务非常有规律地运行(时钟必须在一秒以内)。

我不能保证完全的时钟同步,所以我没有使用集群功能,而是考虑拥有一个 Quartz 实例(具有备用故障转移)。让单个实例执行作业不是问题,但我仍然需要所有 Web 服务器都能够安排作业。

我可以直接将作业从 Web 服务器添加到 JDBCJobStore,它们会被(非集群)Quartz 服务器拾取吗?我将通过在 Web 服务器中创建计划实例来添加作业来做到这一点。这些实例永远不会启动,只是用于访问 JobStore。

【问题讨论】:

    标签: quartz-scheduler cluster-computing


    【解决方案1】:

    编写了一个测试程序,该程序使用与“真实”调度程序(也是非集群)相同的 JobStore 创建“非集群”Quartz 调度程序,并调度作业。几秒钟后,这些作业确实会被执行,所以它似乎可以工作。

    更新:我将此问题交叉发布到 Quartz 论坛,并got the answer that this should work。他们在related question 中声明

    其他进程可以通过以下方式将作业插入到该​​数据库中:

    1- 使用来自另一个进程的石英的 rmi 功能,并使用石英 API

    2- 在另一个进程(例如 webapp)中实例化调度程序,也将其指向同一个数据库,但不启动()该调度程序实例,并使用石英 api 调度作业。

    【讨论】:

    • 这是否意味着当你有一个作业存储时,所有作业将在所有 Quartz 调度程序之间共享?我找不到任何有关作业商店实际用途的文档。
    猜你喜欢
    • 2019-06-30
    • 2011-05-24
    • 2018-09-15
    • 1970-01-01
    • 2017-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多