问题标签 [quartz.net-2.0]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2240 浏览

c# - Quartz.NET - 计划任务停止随机运行

我们以不同的时间表运行 Quartz.NET 来处理从每 30 秒到每周一次的各种作业。

在查看我们的内部日志记录时,我们发现一些作业无缘无故停止运行,而其他作业仍在继续运行。例如,我们的每 30 秒作业在给定时间失败,而另一个每 10 分钟作业持续了几个小时,然后也失败了。日常任务后来停止了。

我们启用了 Quartz 日志记录并发现以下内容。

以前成功的火灾记录:

第一次失败的日志:

此后,直到我们重新启动服务,该特定作业才再次运行。没有迹象表明我们的任何代码都在这个特定实例上运行,因为我们在内部进行了自己的日志记录,这在当时还没有发生。

我们为每项工作配置的失火处理如下:

我了解“DoNothing”指令告诉它跳过这场火灾并继续执行计划。因此,如果发生失火,我希望它在下一次开火时再次开火。

1) 为什么我们的 Quartz 作业会随机失败?

2)我们可以做些什么来进一步调查?

0 投票
1 回答
5417 浏览

c# - 单元测试 Quartz.net Execute()

首先,我是 Quartz.net 和 Moq 的新手。

我正在尝试使用 Moq 对 Quartz.net Execute 方法进行单元测试。Execute() 在 IJob 接口中定义。Execute 方法需要一个 IJobExecutionContext 传递给它。

我创建了一个名为 RunItinerary 的新作业类,它继承自 IJob 接口。下面是我所拥有的一个例子。

下面是我的单元测试的一个例子。我尝试运行一个简单的单元测试都没有成功。这是我尝试过的测试示例。

以下是错误:(x 用于掩盖内部名称)

我相信我缺少的东西在 mockIJobExecutionContext.Setup(x => x.???????) 中,我只是无法弄清楚我需要用 .Setup() 做什么

我已经查看了有关单元测试此 Execute() 的类似发布问题,但示例代码没有明确的答案。

如果有人可以提供答案,您能否为此提供一个示例单元测试?

0 投票
2 回答
768 浏览

quartz.net - 自定义 Quartz.Net 触发器

我想实现我自己的自定义触发器。触发器的主要目的两次:开始日期和结束日期(将其视为开/关开关,“开”状态和开始日期以及结束日期的“关”状态)。

实现这一目标的最佳方法是什么?

AbstractTrigger或实现ITrigger

需要实现IScheduleBuilder吗?

0 投票
1 回答
150 浏览

f# - Quartz.NET 和 F# - SystemTime 和 KeyMatcher

我正在尝试在 F# 中使用 Quartz.NET,并且遇到了一些问题,尽管 Quartz.NET 在 F# 中可用,但似乎没有太多关于它的文档,而且我遇到了一些困难它与 C# 中的内容之间存在差异。

我目前遇到的一个问题是设置 SystemTime,例如这个问题 Quartz.net + testing with SystemTime.UtcNow中所示。

我可能是错的,但我认为 F# 中的代码应该是:

但是我收到一个错误,即在不期望的地方使用了太多参数或函数。如果我只使用 DateTime 构造函数,我会收到一个与它期望一个函数有关的错误。

0 投票
0 回答
193 浏览

f# - Quartz.net - F# Keymatcher

我猜这可能是一个相当简单的问题,并且很抱歉我无法找到这个问题的答案。

在 C# 中使用 Quartz.net 时,如果您使用的是作业侦听器,您通常会使用如下代码行:

你也可以使用:

但随后 JobListener 将关注任何工作而不是指定的工作。

在 F# 中工作时,我可以成功创建并添加一个 JobListener,但似乎无法识别 KeyMatcher。我想知道它是否使用不同的名称,或者我是否缺少导入声明。这是我目前使用的与 Quartz 相关的两个导入声明:

感谢您提供任何帮助。

0 投票
1 回答
681 浏览

c# - Quartz.net - 调整和加速 SystemTime 导致失火的问题

出于测试原因,我希望能够调整 Quartz.Net 当前认为的时间,因此我不必等待数小时、数天或数周来检查我的代码是否正常工作。

为此,我创建了以下简单函数(它在 F# 中,但可以用 C# 或其他语言轻松完成):

currentTime、lastCheckedTime 和simulatedTime 都属于DateTimeOffset 类型,而timeDifferenceInSeconds 和scaleTimeBy 都是float 类型。

然后我将 SystemTime.Now 和 SystemTime.UtcNow 更改为使用上述函数,如下所示:

Mark Seemann 在我的上一个问题中展示了这一点,可以在这里找到。

现在这主要是有效的,只是似乎较长的功能导致它偏离了相当大的幅度。我的意思是我所有的触发器都会失火。例如,如果我将触发器设置为每小时发生一次,并将 scaleTimeBy 设置为 60.0,以便通过的每一秒都计为一分钟,那么它永远不会真正按时触发。如果我有一个失火策略,那么触发器可以关闭,但它列出的激活时间将迟到半小时(因此比本示例中应该慢了整整 30 秒)。

但是我可以这样做:

在这个例子中,两次输出到屏幕上的时间差正好是一个小时,所以调用似乎不应该比它增加那么多的时间差。

有人对如何解决此问题或处理此问题的更好方法有任何建议吗?

编辑:所以 SimulateTime 函数的 C# 版本将是这样的:

如果这可以帮助任何人解决这个问题。

0 投票
1 回答
77 浏览

xml - Quartz.net 服务器遇到两个同名的作业?

当 Quartz.net 服务器(作为 Windows 服务运行)遇到两个具有相同名称和组的作业时会发生什么?例如:

服务器会覆盖第一个吗?或抛出错误?

0 投票
1 回答
624 浏览

.net - Quartz.Net 调度程序 - 什么特别表明作业成功完成?

Quartz 确定作业是否成功的唯一因素是作业的 Execute() 方法是否在未引发 JobExecutionException 的情况下完成?

这是我一直在努力的假设;因此,如果我将一个监听器连接到我的工作并且 JobWasExecuted(...) 中的 jobException 参数 == null ,那么我假设 Quartz 认为该工作是成功的。

我之所以问,是因为我看到其他人从 JobWasExecuted(...) 中检查 TriggerState,如果它是 TriggerState.COMPLETE,他们似乎认为这项工作是成功的。但这只是检查触发器本身的状态,而不是检查工作,对吗?如果是这种情况,COMPLETE 的 TriggerState 是否仅仅意味着触发器已触发?

所以我要确认两件事:

  1. 在作业的 Execute 方法中缺少抛出的 JobExecutionException(因此在侦听器中为 null)意味着(对于 Quartz)作业成功完成

  1. TriggerState 不是作业完成成功的指标
0 投票
1 回答
639 浏览

.net - Quartz.Net 调度程序 - 可以报告已完成的非持久作业吗?

我正在尝试了解 Quartz 的工作耐久性。根据文档,如果您在创建作业时指定 .StoreDurably() ,即使当前没有触发器,作业也会持续存在(注意我使用的是数据库支持的存储)。这是否意味着如果我没有指定持久性,我就不能报告已经完成的工作?意思是,一旦作业完成并且我退出触发器的(如果我有)JobHasExecuted() 方法,就不再有任何作业已运行的记录?

0 投票
2 回答
274 浏览

c# - 更频繁地启动quartz.net 工作

我们正在使用 Quartz.net 并且需要更频繁地解雇这些工作。作业设置为在 3 秒内触发,但通常需要 15-30 秒才能运行。

我也试过(没有结果)< add key="quartz.jobStore.clusterCheckinInterval" value="1000" />

感谢您的任何帮助。如果重要,我们正在使用 2.1.2.400

我们的配置

代码