集群(多个实例)Quartz 调度程序中断 API 无法有效工作

Clustered(Multiple Instances) Quartz scheduler Interrupt API not working effectively

我有一个集群式石英调度程序(3 运行 java 个实例指的是存在石英表的同一个数据库)。以下是我的石英属性文件中的内容。 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 出现为 false.

案例二: 职位 运行 例如 'A' 当中断请求到达实例 'A' 时,它通过中断 Jobs 完美地完成了工作。

有人可以帮助我吗?我是否缺少多实例(集群)设置的额外配置?

非常感谢!!!

这就是 Quartz 的工作原理。当您想到它时,一个 Quartz 集群就是“只是”一堆独立的 Quartz 实例,它们碰巧共享相同的 JDBC 作业存储。 Quartz 实例可以随心所欲地来去去去,它们不必注册/注销,没有中央节点跟踪当前集群拓扑并协调计划作业的执行。

这种设计有一些优点(例如,由于不存在集中式node/manager,更容易实现、更高的可靠性和健壮性)和一些缺点(例如,作业中断等集群范围的操作是实现起来有点棘手,负载平衡是原始的)。

要实施您的用例,您必须:

  1. 遍历所有集群化的 Quartz 调度程序和查询调度程序,以获取该特定调度程序实例上所有当前正在执行的作业的列表。

  2. 找到当前正在执行您的作业的 Quartz 调度程序实例。

  3. 对找到的Quartz调度器实例调用中断操作。

由于必须进行远程调用,因此不能使用本地 Quartz API。我建议使用 Quartz JMX API 来完成这项工作,或者您可以使用 Quartz RMI API。两者都非常易于使用,Google.

上应该有足够的示例