【问题标题】:Non-clustered Quartz Scheduler: Instantiating and starting scheduler on application startup... is this safe for multiple machines?非集群 Quartz 调度程序:在应用程序启动时实例化和启动调度程序……这对多台机器安全吗?
【发布时间】:2017-10-17 13:46:43
【问题描述】:

我的应用程序当前在应用程序启动期间实例化并启动一个默认调度程序,使用:

@Override
public void contextInitialized(ServletContextEvent arg0) {
    try {   
        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
        scheduler.start();
    } catch (SchedulerException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

此逻辑在云端机器以及本地开发机器上运行,并且quartz.properties 当前设置为非集群模式。该应用程序也在使用 JDBC Job Store。

我担心每台机器都有一个调度程序实例——请给我一些关于如何在多台机器上管理 Quartz 调度程序的建议。这个用例需要集群吗?

我安排了一个测试触发器每分钟运行一次。虽然没有重复的作业执行,但我注意到有一些错过的解雇从未算作失误。

【问题讨论】:

  • 您能详细说明您的用例吗?从您所描述的情况来看,它不是很清楚。您的用例是否需要多个实例来通过形成集群来分担负载,或者您只是在寻找持久性支持?您的每个节点是否管理自己的工作负载?
  • @Srinivas 在尝试了不同的配置之后,我找到了适用于该应用程序的设置。我将在下面的答案中写更多关于它的信息。

标签: java quartz-scheduler quartz


【解决方案1】:

我尝试了配置和设置,并找到了适用于我的应用程序的设置。应用服务器从集群配置中提供 Web 资源;我的错误是在每个应用服务器中启动了一个非集群调度程序实例。

目前,我不认为这个应用程序需要多台机器来处理预定的作业。另外,我还没有弄清楚如何在我们的云服务器上同步系统时间,这是 Quartz 集群功能的要求。

我最终使用了一台非集群机器来启动一个调度程序实例。此配置按预期工作,并且奇怪的错误已消失(未确认的失火等)。

【讨论】:

    猜你喜欢
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    相关资源
    最近更新 更多