在石英作业执行期间,我的一个活动在每次运行(每分钟)一两个小时后可能会失败,因为依赖服务器因维护而关闭。我注意到,当发生这种情况时,作业会停止运行,并且似乎在不记录任何我可以看到的异常的情况下取消预定。这项工作仍然在那里,因为我有另一个工作,并确保它在那里,我已经给出了分配的时间表,但工作本身停止执行。我假设有一些阈值可以删除一个导致连续异常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.");
}
}
答案 0 :(得分:1)
一旦我们升级到提供了全面日志记录的最新版本的quartz,我们发现偶尔会在构造函数中出现一些错误,从而导致Quartz自动将作业触发器的状态更改为ERROR or BLOCKED。我们在原木中看不到这些,因为它们是内部石英原木的一部分。为了解决这个问题,我们在工作管理器中添加了对触发状态的检查,并重新安排了处于两种状态的工作。