4

我在 Java EE 应用程序的上下文中运行 Quartz 的集群实例。Java EE 应用程序中的一个节点(随机选择)将触发一系列 Quartz 作业以立即执行(如本文所述);在触发每个作业之前,与该作业关联的 JobListener 被添加到调度程序的 ListenerManager。

如果我理解 Quartz 的内部工作正常,那么实际执行每个作业的节点将从可用节点中随机选择。如果是这种情况,如果侦听器是在与执行作业的节点不同的节点中创建的,如何调用侦听器的方法?我可以假设 ListenerManager 中的侦听器列表是全局的并且对于集群中的所有节点都相同吗?或者每个节点都有自己的 ListManager 和自己的侦听器?

4

2 回答 2

3

我在一本免费的在线书籍中找到了一些更有用的信息:

在集群环境中使用全局监听器

您仍然可以在集群环境中使用作业和触发侦听器。当您尝试了解哪个调度程序实例将接收回调方法时,唯一的困惑出现了。

记住这一点的最简单方法是在执行作业或触发器的调度程序实例中通知侦听器。由于作业和触发器仅在单个节点上执行,因此会在该节点上通知侦听器。

于 2019-08-08T07:04:17.190 回答
2

根据石英文档:

侦听器在运行时向调度程序注册,并且不与作业和触发器一起存储在 JobStore 中。这是因为侦听器通常是与您的应用程序的集成点。因此,每次您的应用程序运行时,侦听器都需要重新注册到调度程序。

参考http://quartz-scheduler.org/files/documentation/Quartz-2.1.x-Documentation.pdf

希望这可以帮助

于 2014-02-12T12:21:26.947 回答