集群(多个实例)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,更容易实现、更高的可靠性和健壮性)和一些缺点(例如,作业中断等集群范围的操作是实现起来有点棘手,负载平衡是原始的)。
要实施您的用例,您必须:
遍历所有集群化的 Quartz 调度程序和查询调度程序,以获取该特定调度程序实例上所有当前正在执行的作业的列表。
找到当前正在执行您的作业的 Quartz 调度程序实例。
对找到的Quartz调度器实例调用中断操作。
由于必须进行远程调用,因此不能使用本地 Quartz API。我建议使用 Quartz JMX API 来完成这项工作,或者您可以使用 Quartz RMI API。两者都非常易于使用,Google.
上应该有足够的示例
我有一个集群式石英调度程序(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,更容易实现、更高的可靠性和健壮性)和一些缺点(例如,作业中断等集群范围的操作是实现起来有点棘手,负载平衡是原始的)。
要实施您的用例,您必须:
遍历所有集群化的 Quartz 调度程序和查询调度程序,以获取该特定调度程序实例上所有当前正在执行的作业的列表。
找到当前正在执行您的作业的 Quartz 调度程序实例。
对找到的Quartz调度器实例调用中断操作。
由于必须进行远程调用,因此不能使用本地 Quartz API。我建议使用 Quartz JMX API 来完成这项工作,或者您可以使用 Quartz RMI API。两者都非常易于使用,Google.
上应该有足够的示例