【问题标题】:Quartz.net tracking and misfiringQuartz.net 跟踪和失火
【发布时间】:2014-03-05 06:48:38
【问题描述】:

我有几个关于quartz.net 的问题。

如果 Quartz.net 出现了失火情况,是什么来跟踪的?

在以下情况下会发生什么:

如果作业运行但由于某些错误而无法完成,这是否算作失火?

如果我重新发布解决方案会发生什么情况,跟踪是否会重置?

有没有办法接收有关调度程序已完成和无法执行的操作的信息?

我的 Run 方法中有以下代码:

IJobDetail dailyUserMailJob = new JobDetailImpl("DailyUserMailJob", null, typeof(Jobs.TestJob));


ITrigger trigger = TriggerBuilder.Create()
                    .WithIdentity("trigger1", "group1")


                    .WithCronSchedule("0 0 4 1 * ?", x => x.WithMisfireHandlingInstructionFireAndProceed())
                    .Build();

        this.Scheduler.ScheduleJob(dailyUserMailJob, trigger);

        this.Scheduler.Start();

该作业应该在每个月的凌晨 4 点运行。

在测试时我已经设置了系统时钟,以便在一个月内错过 jobb。根据使用 WithMisfireHandlingInstructionFireAndProceed 时的文档,作业应该在发生的第一件事中运行,但它并不重要。代码有问题还是其他原因导致作业在使用 WithMisfireHandlingInstructionFireAndProceed() 时无法运行?

【问题讨论】:

  • 你有 RamStore(内存)或 AdoStore 吗?
  • 我如何知道 Quartz 是否使用 ADOStore och RamStore?

标签: quartz-scheduler quartz.net


【解决方案1】:

如果错过了一项工作,有逻辑将其恢复。但是,有一个“窗口”可以告诉您可以返回多远。

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

你可以增加这个值。

如果您有 ADOStore,则会持续出现失火。因此,“如果停电”,在重新启动时……您可以从失火中恢复。

如果你有一个 RamStore...如果“断电”,一切都在内存中......所以你不会得到错误处理,因为一切都在“内存中”并且内存是丢了。

..

如果您使用 Sql Server (AdoStore) 并在其上放置 Profiler/Trace,您将看到引擎“轮询”是否发生失火......带有“及时返回”基于失火阈值。

查看此链接:

http://nurkiewicz.blogspot.com/2012/04/quartz-scheduler-misfire-instructions.html

了解更多详细信息。其中有一个“withMisfireHandlingInstructionFireAndProceed”注释。

【讨论】:

  • 谢谢!我如何知道 Quartz 是否使用 ADOStore och RamStore?
  • 您将其配置为使用其中一个。默认值(我猜)可能是 RamStore(内存)。在这个问题上检查我的~answer~...对于一个正常运行的 AdoStore。 stackoverflow.com/questions/22047254/…
  • 你把它放在 web.config 文件中了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多