【问题标题】:Quartz.Net jobs showing 'Completed' but are not disappearing from the job queueQuartz.Net 作业显示“已完成”但并未从作业队列中消失
【发布时间】:2015-12-01 22:29:03
【问题描述】:

我在由 SQL Server 数据库支持的 ASP.NET 应用程序中运行 Quartz.NET(最新)进程。我有一个管理进程,它使用来自Get all jobs in Quartz.NET 2.0 的代码运行并将当前正在运行的作业的详细信息输出到日志文件。

这是一个示例(和真实)输出:

-----STARTING JOBS STATUS CHECK at 11/28/2015 5:51:06 PM -----
Job group: UPDATE_TRANSFER_FEED_JOB_GROUP
Job name: 155143_UPDATE_TRANSFER_FEED_JOB
Job data - Key: SourceFeedUpdateID, Value: 155143
Description:
Trigger name: 155143_UPDATE_TRANSFER_FEED_JOB
Trigger group: UPDATE_TRANSFER_FEED_JOB_GROUP
Trigger type: SimpleTriggerImpl
Trigger state: Complete
Previous fire time: 11/28/2015 5:41:00 PM
-----FINISHED JOBS STATUS CHECK-----

我会定期看到某些显示“触发状态:完成”但从未离开队列的作业(这可能是不正确的术语)。换句话说,每次输出作业状态时,它们都会不断出现在日志中(如上所示),并且它们会无限期地停留在那里。此外,我为这种类型的作业设置了一个作业侦听器,我看到对于卡住的作业 Listener.JobWasExecuted() 是 never 调用的。如我所料,其他作业完成并从输出中消失。

处理这些卡住的作业的唯一方法是重新启动网络应用程序。重新启动后,侦听器的 JobWasExecuted() 立即触发,它们显示“Job Requests Recovery = Yes”,并且在下次运行作业状态记录时消失。

我感觉部分原因是我不了解工作的生命周期和状态。

你能帮我理解一下吗?

【问题讨论】:

    标签: asp.net .net quartz-scheduler quartz.net


    【解决方案1】:

    根据 Quartz.Net 文档,如果将以下 JobDetail.Durable 属性设置为 true,则不会从队列中删除作业。

    “设置属性 JobDetail.Durable = true - 指示 Quartz 在 Job 成为“孤儿”时不要删除 Job(当 Job 不再有 Trigger 引用它时)。 http://www.quartz-scheduler.net/documentation/faq.html

    【讨论】:

    • 我没有设置 Durable 属性,默认设置为 false。但是,这种情况的发生不一致且偶尔发生,这向我表明问题可能与耐久性无关。我想了解的一件事是,如果我看到“触发状态:完成”(如上),那么我是否应该期望侦听器的 JobWasExecuted() 会被解雇?
    • @Robert - 你有没有得到这个答案?我也遇到了同样的情况。
    • 你能通过更新你的quartz dll来测试吗?您使用的是哪个版本。
    猜你喜欢
    • 2017-09-20
    • 1970-01-01
    • 1970-01-01
    • 2016-03-30
    • 2021-06-14
    • 2014-10-13
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    相关资源
    最近更新 更多