c# - Quartz.Net 作业在几次异常后停止触发

标签 c# quartz.net

在quartz作业执行期间,我的一个事件可能每次运行(每分钟)一两个小时都会失败,因为依赖服务器因维护而停机。我注意到,当发生这种情况时,作业会停止运行,并且似乎会自行取消安排,而不会记录我可以看到的任何异常。该作业仍然存在,因为我有另一个作业正在运行并确保它按照我给它的分配的时间表存在,但作业本身停止执行。我假设有一些阈值可以删除导致连续 x 次异常的作业,但我希望我能找到一个明确的答案。

我试图说服主要开发人员捕获异常并将其记录下来,而不是抛出通用异常并让它冒泡,但在那之前,我能做的就是研究这个问题。

这本质上是执行代码。我还在类本身上设置了 DisallowConcurrentExecution 属性。当此故障发生时,它会在不到 5 秒的时间内发生,因此我不希望它在这里发挥作用:

    public void Execute(IJobExecutionContext context)
    {
        _logger.Log("Starting synchronization.");

        try
        {
            syncActivities();
        }
        catch (Exception ex)
        {   
            _logger.Log("Error. ", ex);
            throw;
        }
        finally
        {
            _logger.Log($"Completed synchronization.");
        }
    }

最佳答案

一旦我们升级到提供了一些全面日志记录的最新版本的quartz,我们发现构造函数中偶尔会出现一些错误,这导致Quartz自动将我们的作业触发器的状态更改为ERROR or BLOCKED 。我们在原木中没有看到这些,因为它们是内部 quartz 原木的一部分。为了解决这个问题,我们向作业管理器添加了对触发器状态的检查,并重新安排了处于任一状态的作业。

enter image description here

关于c# - Quartz.Net 作业在几次异常后停止触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47764916/

相关文章:

c# - 为什么这会给我两组不同的时区?

c# - 在 WinRT 应用程序中重新请求授权

c# - 使用 C# 驱动程序是复制和复制 MongoDB 集合的更好方法吗?

c# - 在 Quartz.NET 中调度高 CPU 负载的作业

c# - Lists.AddAttachment 抛出对象引用错误

c# - 为 if else 语句编写单元测试

.net - WinForms - 如何在不传递委托(delegate)的情况下从单独的线程访问/调用 UI 线程中的方法?

asp.net - Quartz.net 和 Ninject : how to bind implementation to my job using NInject

quartz.net - quartz.NET 的任何开源管理 UI

asp.net - 在 ASP.NET MVC 的服务器端使用 WPF 控件