当前位置: 首页 > 知识库问答 >
问题:

集群模式下的Quartz调度器:是否在随机节点上触发高频和低频触发器?

巫培
2023-03-14

我在这里读到了以下关于石英簇模式的声明:

我假设“低频繁触发器”(每天一次)也会导致作业在随机节点上执行,因为有很多触发器“接近其执行时间”(高频繁触发器),所以从Quartz的角度来看,在下午01:00左右有很多触发器。

共有1个答案

秦奇
2023-03-14

每个Quartz实例以特定的间隔轮询数据库,该间隔由属性org.Quartz.scheduler.IdleWaitTime控制

以毫秒为单位,是当计划程序处于空闲状态时,计划程序在重新查询可用触发器之前等待的时间。通常情况下,您不应该“调优”这个参数,除非您使用的是XA事务,并且遇到了延迟触发应该立即触发的触发器的问题。不建议使用小于5000毫秒的值,因为它会导致过多的数据库查询。小于1000的值是不合法的。

此属性的默认值为30秒

配置了这两个属性后,我认为负载平衡取决于哪个实例首先轮询数据库以获得触发器上的锁,以及哪个实例有空闲的线程来接收作业。

对于非忙调度器,特别是对于所有实例具有相同的间隔,作业可以倾向于每分钟首先轮询数据库的实例。

 类似资料:
  • 我有一个应用程序,使用Quartz作为作业调度程序。有两种情况 null > 应用程序的两个实例都将启动并连接到数据库。两者都报告它们已成功群集并连接到数据库。 当我根据场景1调度作业时,在作业执行时,只有一个应用程序执行作业。 场景2,即每10秒执行一次的cron作业,由两个应用程序同时执行。 任何帮助或指导将非常感谢!

  • 我想知道是否有一个函数/方法来创建随机时间触发的作业。我的意思是,如果我设置一个cron计划在每周一上午10:00触发,并给出一个时间间隔,比方说30分钟,触发器将总是在9:30到10:30之间关闭。例如,这是cron调度表。

  • 问题内容: 我在集群环境中将Quartz Scheduler用作Spring bean。 我有一些用@NotConcurrent注释的作业,它们每个集群运行一次(即,仅在一个节点中,仅在一个线程中)。 现在,我需要在集群的每个节点上运行一项作业。我删除了@NotConcurrent批注,但是它仅在一台计算机上的每个线程上运行。它不会在其他节点上触发。 我应该用什么来注释作业? 示例:带注释的Job

  • 我有一些用@NotConcurrent注释的作业,它们每个集群运行一次(即,只在一个节点中,只在一个线程中)。 现在我需要在集群的每个节点上运行一个作业。我删除了@NotConcurrent注释,但它只在一台机器上的每个线程上运行。它不会在其他节点上被激发。 我应该用什么来注释这份工作?

  • 相关:Quartz群集-服务器启动时触发器重复 null 这是很好的,但我担心的是,当两个实例完全同时启动时,可能会出现竞争情况。因为在这段代码周围没有全局锁,集群中的所有节点都将尊重它,如果两个实例同时联机,我可能会得到重复的作业或触发器,这就违背了这段代码的要点。 在集群环境中是否有自动定义Quartz作业和触发器的最佳实践?还是我需要自己设置锁?