集群模式下的Quartz调度器:高频率和低频率触发随机节点吗



我在这里阅读了以下关于Quartz集群模式的声明:

每次触发只有一个节点会触发作业。我的意思是,如果作业有一个重复触发器,告诉它每10秒触发一次,那么在12:00:00时,正好有一个节点会运行作业,在12:00:10时,正好一个节点将运行作业,等等。它不一定每次都是同一个节点,运行它的节点或多或少是随机的。负载平衡机制对于繁忙调度器(许多触发器(来说几乎是随机的,但对于非繁忙调度器(例如,一个或两个触发器(来说,它有利于刚刚处于活动状态的同一节点

如果我有几个触发器(比如10个(,包括高频率(例如每10秒一次(和低频率(例如每天01:00下午一次(,这两种触发器类型会导致作业在不同的(随机(节点上执行吗?或者;许多触发器";只提到高频率触发器?

我认为;低频率触发器";(每天仅一次(将导致作业在随机节点上执行,因为存在许多触发器";接近它们的执行时间";(高频率的(,所以从Quartz的角度来看,在下午01:00左右,存在很多触发因素。

每个Quartz实例都以特定的时间间隔轮询数据库,由属性org.quarter.scheduller.didleWaitTime控制

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

此属性的默认值为30秒

另一个属性控制可以并行运行的线程数,org.quarter.threadPool.threadCount

可以是任何正整数,尽管您应该意识到只有1到100之间的数字才非常实用。这是可用于并发执行作业的线程数。如果你每天只有几份工作会被解雇几次,那么1个线程就足够了!如果你有数以万计的工作,每分钟都有很多工作启动,那么你可能想要50或100个线程数(这在很大程度上取决于你的工作执行的工作性质和你的系统资源!(。

文档链接

配置了这两个属性后,我认为负载平衡取决于哪个实例首先轮询数据库以锁定触发器,以及哪个实例的线程可以自由获取作业。

对于非繁忙的调度器,尤其是在所有实例都具有相同间隔的情况下,作业可以支持每分钟首先轮询数据库的实例。

最新更新