java集群(多示例)quartz调度程序中断api不能有效工作

yhqotfr8  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(341)

我有一个集群的quartz调度器(3个运行java的示例引用quartz表所在的同一个db)。下面是我在我的石英属性文件。 org.quartz.scheduler.instanceId = AUTO org.quartz.jobStore.isClustered = true 下面是java代码

import org.quartz.JobKey;
import org.quartz.Scheduler;
boolean interruptResult = scheduler.interrupt(new JobKey(jobName,groupName));

用例:用例1:作业在示例“a”中运行,当中断请求到达示例“b”时,它不能中断 interruptResult 是假的。
案例2:作业在示例“a”中运行,当中断请求到达示例“a”时,它通过中断作业来完美地完成作业。
有人能帮我吗?我是否缺少多示例(群集)安装的其他配置?
提前多谢!!!

nom7f22z

nom7f22z1#

这就是石英的工作原理。仔细想想,quartz集群就是一堆恰好共享同一个jdbc作业库的独立quartz示例。quartz示例可以随心所欲地来来去去去,它们不必注册/注销,没有中心节点可以跟踪当前集群拓扑并协调计划作业的执行。
这种设计有一些优点(例如,由于不存在集中式节点/管理器,因此更易于实现、更高的可靠性和健壮性),也有一些缺点(例如,集群范围内的操作(如中断作业)更难实现,负载平衡更原始)。
要实现您的用例,您必须:
遍历所有集群的quartz调度程序和查询调度程序,以获取该特定调度程序示例上当前正在执行的所有作业的列表。
查找当前正在执行作业的quartz计划程序示例。
对找到的quartz调度程序示例调用中断操作。
因为您必须进行远程调用,所以不能使用本地quartz api。我建议您使用quartz jmxapi来完成这项工作,也可以使用quartz rmi api。两者都很容易使用,谷歌上应该有足够的例子。

相关问题