2

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

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

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

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

4

1 回答 1

2

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

更新:我将这个问题交叉发布到 Quartz 论坛,并得到了应该可以工作的答案。在一个相关的问题中,他们指出

作业可以由另一个进程通过以下方式插入到该数据库中:

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

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

于 2009-11-23T07:02:30.847 回答