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

Quartz.Net job stops firing after several exceptions

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

我试图说服主要开发人员捕获异常并记录它,而不是抛出一般异常并让它冒泡,但在那之前,我只能研究这个问题。

基本上是执行代码。我还在 class 本身上设置了 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。我们没有在日志中看到这些,因为它们是内部石英日志的一部分。为了解决这个问题,我们向作业管理器添加了触发器状态检查,并重新安排了被发现处于任一状态的作业。