quartz.net - 如何防止 Quartz.Net 失败的工作重试
问题描述
我知道我可以在构建触发器时指定.WithMisfireHandlingInstructionDoNothing()但我的一些作业是通过IScheduler.TriggerJob()方法触发的,因此没有任何触发器。
我可以在ITriggerListener侦听器中检测并记录失火,但如何阻止 Quartz 再次尝试启动该作业?如果我理解正确.VetoJobExecution不可用,因为无论如何都必须成功触发作业。
还有其他想法吗?
编辑:我的实现
JobDataMap jobData = new JobDataMap(data);
IJobDetail jobTemplate = await jobScheduler.GetJobDetail(jobKey);
var jobTrigger = TriggerBuilder.Create()
.ForJob(jobTemplate)
.UsingJobData(jobData)
.WithSimpleSchedule(s => s.WithRepeatCount(0).WithMisfireHandlingInstructionNextWithRemainingCount())
.StartNow()
.Build();
await jobScheduler.ScheduleJob(jobTrigger);
解决方案
好吧,如果您只想要这种TriggerJob
行为,您只需向调度程序添加一个简单的触发器,该触发器将立即触发并为此配置重试策略。因此,如果您可以更改调用站点TriggerJob
来创建一个简单的触发器(可能是允许定义策略的扩展方法),TriggerJob 的 Quartz 源代码就在这里。
推荐阅读
- winforms - Powershell从函数中设置组合框索引
- javascript - 在css中的类内定位类
- python - 如何使用来自其他表的替换 ID 加入查询?
- angular - Angular Select 控件 ngFor 在结果表中不起作用
- c# - 从事件日志中读取。错误:在命名空间中找不到类型名称“EventLog”
- javascript - 在 IE11 中呈现更少的行 - Clusterize.js
- javascript - 需要正则表达式来检查电子邮件是否采用以下格式?
- python - 为什么'__name__'在REPL上打印文件名但在执行文件时打印'__main__'
- angular - 值未在发布请求Angular中传递给正文
- json - 如何在 Azure 逻辑应用中将两个 json 键值对组合为一个?