Scr*_*ers 21 java quartz-scheduler
我在负载均衡器后面有一层相同的应用服务器.出于操作原因,我有一个约束,即两个应用服务器上的应用程序配置必须相同,以便可以轻松添加和删除节点.所有应用服务器共享同一个数据库.应用服务器不会/不会被群集.
到目前为止,这种方法运行良好,但现在我希望在一个应用服务器上执行预定的作业.所有应用服务器都将运行Quartz并具有相同的运行作业计划.触发器将在每个应用服务器上触发,但我希望只有一个应用服务器实际执行该作业 - 实际上它们都是竞争启动而且只有一个实际启动,其余的应用服务器只是忽略了该作业.这里的想法是,如果我们丢失一个应用服务器,另一个将运行该作业,如果我们添加新的应用服务器,他们将轮流运行作业.
我计划通过在数据库中创建一个"作业锁定"表来执行此操作,所有应用程序服务器在启动作业之前都会读取该表,并且只有在作业"解锁"时才会启动.首先对表进行更新的应用服务器将通过将表更新为运行状态/在作业结束时重置它来实质上阻止其他服务器.
在我构建之前,我很感激那些有更多石英经验的人的一些意见:
a)我可以将此行为挂钩到Quartz中,以便不必在每个作业的基础上完成吗?即开发人员可以添加新的工作而不必担心工作锁定,因为它被抽象掉了.
b)Quartz是否提供任何内置机制来实现类似于上面的内容,所以我不必自己滚动它?
谢谢!
Sap*_*Sap 23
你觉得这对你有用吗? http://quartz-scheduler.org/documentation/quartz-2.x/configuration/ConfigJDBCJobStoreClustering
摘自链接
群集当前仅适用于JDBC-Jobstore(JobStoreTX或JobStoreCMT),并且基本上通过使群集的每个节点共享同一数据库来工作.
负载平衡自动发生,集群中的每个节点都尽可能快地触发作业.当触发器的触发时间发生时,获取它的第一个节点(通过锁定它)是将触发它的节点.
归档时间: |
|
查看次数: |
13780 次 |
最近记录: |