gpt4 book ai didi

java - 使用 Quartz 跨多个无状态应用服务器调度单个作业

转载 作者:IT老高 更新时间:2023-10-28 21:01:05 26 4
gpt4 key购买 nike

我在负载均衡器后面有一层相同的应用服务器。出于操作原因,我有两个应用程序服务器上的应用程序配置必须相同的约束,以便可以轻松添加和删除节点。所有应用服务器共享同一个数据库。应用服务器不会/不会被集群化。

到目前为止,这一直运行良好,但现在我希望有一个在其中一个应用服务器上执行的计划作业。所有应用服务器都将运行 Quartz 并具有相同的运行作业时间表。触发器将在每个应用服务器上触发,但我希望只有一个应用服务器实际执行该作业 - 基本上它们都竞相启动并且只有一个实际启动,其余应用服务器只是忽略该作业。这里的想法是,如果我们失去了一个应用服务器,另一个将运行该作业,如果我们添加新的应用服务器,它们将轮流运行作业。

我计划通过在数据库中创建一个“作业锁定”表来实现此目的,所有应用服务器都会在开始作业之前读取该表,并且仅在作业“解锁”时才开始。首先对表进行更新的应用服务器实际上会通过将表更新为运行状态/在作业结束时将其重置来阻止其他服务器。

在我构建这个之前,我很感谢那些有更多 Quartz 经验的人的意见:

a) 我可以将此行为 Hook 到 Quartz 中,这样就不必在每个作业的基础上完成它吗? IE。开发人员可以添加新作业,而不必担心作业锁定,因为它被抽象掉了。

b) Quartz 是否提供任何内置机制来实现与上述类似的功能,这样我就不必自己动手了?

谢谢!

最佳答案

你认为这对你有用吗? http://www.quartz-scheduler.org/documentation/quartz-2.3.0/configuration/ConfigJDBCJobStoreClustering.html摘自链接

Clustering currently only works with the JDBC-Jobstore (JobStoreTX or JobStoreCMT), and essentially works by having each node of the cluster share the same database.

Load-balancing occurs automatically, with each node of the cluster firing jobs as quickly as it can. When a trigger's firing time occurs, the first node to acquire it (by placing a lock on it) is the node that will fire it.`

关于java - 使用 Quartz 跨多个无状态应用服务器调度单个作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6663182/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com