当前位置: 首页 > 面试题库 >

Quartz Scheduler:在每个集群节点上触发一些作业,每个集群仅触发一次

况经纬
2023-03-14
问题内容

我在集群环境中将Quartz Scheduler用作Spring bean。

我有一些用@NotConcurrent注释的作业,它们每个集群运行一次(即,仅在一个节点中,仅在一个线程中)。

现在,我需要在集群的每个节点上运行一项作业。我删除了@NotConcurrent批注,但是它仅在一台计算机上的每个线程上运行。它不会在其他节点上触发。

我应该用什么来注释作业?

示例:带注释的Job1 NotConcurrent已计划在午夜=>仅在每个午夜在1台计算机上触发。计划在午夜注释的Job2
=>它在每个午夜在每台计算机上触发。

谢谢。


问题答案:

AFAIK Quartz作业始终在Quartz拾取的单个节点上执行。@NonConcurrent注释仅阻止Quartz在特定节点上同时执行同一作业。

换句话说,您不能使Quartz同时在多个节点上执行作业。它总是选择一个节点来执行作业。

为了实现您所描述的内容,您可能需要多个作业(使用相同的作业类,并且没有关联的触发器)。然后,您将需要实现某种协调器作业,该作业将通过例如JMX或RMI远程连接到各个节点,并手动触发作业。

您可能需要检查我们的产品QuartzDesk(www.quartzdesk.com),该产品提供了一个提供单个端点的Web服务,您可以通过该端点连接到各个Quartz调度程序实例,例如,触发它们上的作业。



 类似资料:
  • 我有一些用@NotConcurrent注释的作业,它们每个集群运行一次(即,只在一个节点中,只在一个线程中)。 现在我需要在集群的每个节点上运行一个作业。我删除了@NotConcurrent注释,但它只在一台机器上的每个线程上运行。它不会在其他节点上被激发。 我应该用什么来注释这份工作?

  • 我想知道对于quartz是否有一个简单的解决方案/hack来触发一个在集群中的每个节点上都被删除的作业。 我的情况:我的应用程序正在缓存一些东西,并且运行在一个没有分布式缓存的集群中。现在,我需要刷新作业触发的所有节点上的缓存。

  • 不幸的是,我有一个工作是对RAM中的数据进行操作,但没有同步设置。我能看到的最简单的解决方案是让一个作业在所有节点上运行而不进行协调,就像使用一样。 是否有方法将作业配置为在LocalDataSourceJobStore下的所有节点上运行? 精确的定时并不重要,但作业必须每30分钟在每个节点上运行一次

  • 我有一个Spring Boot实例的集群环境。该实例计划每天发送一次电子邮件,我正在使用Quartz Job Scheduler。然而,电子邮件正在由所有实例发送,我需要它只由一个实例发送。是否可以将Quartz调度器配置为仅在一个实例上启动作业,我不在乎哪个实例。

  • 我有一个应用程序,使用Quartz作为作业调度程序。有两种情况 null > 应用程序的两个实例都将启动并连接到数据库。两者都报告它们已成功群集并连接到数据库。 当我根据场景1调度作业时,在作业执行时,只有一个应用程序执行作业。 场景2,即每10秒执行一次的cron作业,由两个应用程序同时执行。 任何帮助或指导将非常感谢!

  • 我正在尝试将使用SSIS包创建的数百个feed文件ETL作业替换为apache flink作业(并将kuberentes作为底层infra)的可行性。我在一些文章中看到的一条建议是“为一种工作使用一个flink集群”。 由于我每天都有少量的每种工作类型的工作,那么这意味着对我来说最好的方法是在执行工作时动态创建flinkcluster并销毁它以释放资源,这是正确的方法吗?我正在建立flinkclu