【问题标题】:Quartz scheduling queues up missed scheduled jobsQuartz 调度将错过的调度作业排队
【发布时间】:2015-10-08 16:12:30
【问题描述】:

我有一个这样的石英工作时间表:

_scheduler.ScheduleJob(job,
    TriggerBuilder.Create().ForJob(job)
        .WithSimpleSchedule(x =>                                             
        x.WithIntervalInSeconds(requeryTime.ToInt32())
        .RepeatForever()
        .WithMisfireHandlingInstructionNowWithRemainingCount()                                             
    )                                        
    .StartNow()
    .Build())

为了测试,我让计划每 10 秒运行一次。如果我暂停服务然后恢复,我仍然可以看到所有作业一个接一个地被调用。我希望 Quartz 忽略(不排队)这些工作,而只是恢复计划。 例如如果作业每 10 秒运行一次,并且我将服务暂停 1 分钟,我会快速连续运行 6 个作业。

如何确保 Quartz 忽略这些工作?

【问题讨论】:

  • 对此有何反馈?
  • 我需要重新评估导致这种情况的条件。我在控制台窗口中暂停了我的应用程序,我不确定这是一个很好的测试。暂停应用程序有效地暂停了石英调度程序,因此一次调度所有作业(将它们排队)。我不确定这是否与已经很忙时安排的作业相同。

标签: quartz.net


【解决方案1】:

简短的回答是更改配置中的misfireThreshold

<add key="quartz.jobStore.misfireThreshold" value="60000" />

默认值为 60000 毫秒(60 秒)。

org.quartz.jobStore.misfireThreshold

调度程序将“容忍”触发器的毫秒数 在被认为“失火”之前,通过下一次点火时间。这 默认值(如果您没有在您的 配置)为 60000(60 秒)。

由于您的触发器每 10 秒运行一次,您可以将阈值降低到 9 秒,它应该可以按预期工作。

如果您想了解有关所涉及策略的更多信息,您也可以阅读此articlethis

最近有人问了一个类似的问题,Circular Reference 给出了一个非常好的answer

【讨论】:

    猜你喜欢
    • 2015-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    • 1970-01-01
    • 2015-01-30
    相关资源
    最近更新 更多