我在负载均衡器后面有一层相同的应用程序服务器。出于操作原因,我的约束是两个应用程序服务器上的应用程序配置必须相同,以便可以轻松添加和删除节点。所有应用服务器共享相同的数据库。应用服务器未/将不会集群。
到现在为止,它一直运行良好,但是现在我希望有一个计划的作业,该作业恰好在其中一个应用程序服务器上执行。所有应用服务器都将运行Quartz,并且具有相同的运行时间表。触发器将在每台应用服务器上触发,但我只希望一台应用服务器实际执行该作业-
本质上,它们都竞相启动,而实际上只有一台启动,其余的应用服务器只是忽略该作业。这里的想法是,如果我们丢失一台应用服务器,则将由另一台服务器运行该作业,并且如果添加新的应用服务器,它们将轮流运行作业。
我打算通过在数据库中有一个“作业锁定”表来做到这一点,所有应用程序服务器在开始作业之前都将读取该表,并且仅在“解锁”作业时才启动。首先对表进行更新的应用服务器实质上将通过将表更新为运行状态/在作业结束时将其重置来阻止其他表。
在构建此库之前,我希望感谢那些对Quartz有更多经验的人员提供的一些意见:
a)我可以将此行为挂接到Quartz中,这样就不必在每个作业中都完成它了吗?即,开发人员可以添加新作业,而不必担心作业锁定,因为它被抽象了。
b)Quartz是否提供任何内置机制来实现与上述相似的功能,所以我不必自己动手做?
谢谢!
您认为这对您有用吗? http://www.quartz-
scheduler.org/documentation/quartz-2.3.0/configuration/ConfigJDBCJobStoreClustering.html
链接摘录
群集当前仅适用于JDBC-Jobstore(JobStoreTX或JobStoreCMT),并且实质上是通过使群集的每个节点共享同一数据库来工作的。
负载平衡是自动发生的,群集中的每个节点都会尽快启动作业。当触发器的触发时间发生时,要获取它的第一个节点(通过在其上放置锁)将是触发它的节点。
如何使用quartz 1.6.2根据动态接收的参数和开始日期和时间调度和执行此方法。我是一个新的石英调度器,我不知道如何做这一点。有没有人帮我用你的示例程序?
我希望使用Quartz调度器,以便应用程序的服务器部分使用调度器创建一个作业并将其存储在JDBCStore中,而UI部分(前端)使用调度器的另一个实例(指向相同的数据库模式)为该作业添加触发器。我以为UI知道作业和组的名称就足够了,因为添加触发器类似于: 不幸的是,这会为job类抛出异常。如有任何帮助,我们将不胜感激。谢谢你。
问题内容: 我试图理解这一点。通常,每次用户登录系统时,服务器端都会创建一个会话,而用户客户端端则有cookie。当人们谈论无状态服务器端,有状态客户端时,它们是什么意思?服务器端无需使用会话保持跟踪用户?只在客户端使用Cookie来检查用户?意味着如果我更换服务器,用户将不会注意到它,仍然可以继续使用该服务? 如何配置spring-security来做到这一点? 问题答案: 对于真正的无状态服务
使用ws,Node.js WebSocket库,可以让多个服务器共享一个HTTP/S服务器。 有可能用socket.io做同样的事情吗?