【问题标题】:how to reduce quartz scheduling latency如何减少石英调度延迟
【发布时间】:2014-03-05 08:19:24
【问题描述】:

我在 Spring 下使用由 jdbc 作业存储支持的 Quartz,并且我试图让它“现在”触发作业:

Trigger adHocTrigger = TriggerBuilder.newTrigger().withIdentity(adHocTriggerKey).forJob(jobKey).startNow().build();
quartzScheduler.scheduleJob(adHocTrigger); //now

默认情况下,此调用与作业实际开始执行的时间之间的测量延迟约为 30 秒。这是一个示例作业,用于测量我使用的一次性触发延迟:

@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
   Trigger trigger = context.getTrigger();
   if (!trigger.mayFireAgain()) {
      //its a one-off, compute latency
      long latency = System.currentTimeMillis() - trigger.getFinalFireTime().getTime();
      logger.info("firing latency is {} millis",latency);
   }
}

阅读the documentation后发现延迟的原因是“org.quartz.scheduler.idleWaitTime”配置参数(基本上是作业存储轮询频率?),它可以配置为低至1000毫秒(此时点我得到的延迟大约是 900 毫秒)。

我知道将它设置得这么低可能会导致数据库抖动(我使用 jdbc 作业存储),因此不建议这样做,但是有没有办法在不诉诸于此的情况下实现低延迟?

是否没有可选的配置属性会导致“立即启动”实际执行?

【问题讨论】:

  • 为什么不直接调用工作,而是委派 Quartz?
  • @PabloLozano - 因为这可能是一项很长的工作,并且触发它的代码是 ui 支持的,不能延迟。也因为作业是由多个触发器触发的单例作业(@DisallowConcurrentExecution),有些重复,我不想自己实现锁定
  • @radai - 你有什么解决办法吗?
  • @VijayGupta - 没有。我不得不忍受它

标签: java spring quartz-scheduler


【解决方案1】:

在不降低 idleWaitTime 的情况下解决此问题的一种方法是稍微修改 QuartzScheduler 以支持事务。我不使用 Spring,所以我不知道那里会是什么样子,但这是基本思想。

class TransactionAwareScheduler extends QuartzScheduler {
    @Override
    protected void notifySchedulerThread(long candidateNewNextFireTime) {
        if (insideTransaction) {
            transaction.addCommitHook(() -> {
                super.notifySchedulerThread(candidateNewNextFireTime);
            });
        }
    } else {
        super.notifySchedulerThread(candidateNewNextFireTime);
    }
}

它为我们彻底解决了问题。

【讨论】:

    【解决方案2】:

    文档说“triggerJob”会立即触发该作业。检查这是否满足您的要求。

     quartzScheduler.triggerJob(jobKey);
    

    【讨论】:

    • 我试过了。它让我得到与我上面描述的完全相同的结果。 “立即”实际上意味着“下次调度程序轮询工作”
    猜你喜欢
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 2012-11-04
    • 2018-04-10
    • 1970-01-01
    • 2012-06-25
    • 2012-06-14
    • 2014-06-12
    相关资源
    最近更新 更多