【问题标题】:How to prevent Quartz.Net misfired job from retrying如何防止 Quartz.Net 失败的工作重试
【发布时间】:2021-03-24 11:53:38
【问题描述】:

我知道我可以在构建触发器时指定 .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);

【问题讨论】:

    标签: quartz.net misfire-instruction


    【解决方案1】:

    好吧,如果您只想要TriggerJob 行为,您只需向调度程序添加一个简单的触发器,该触发器将立即触发并为此配置重试策略即可。因此,如果您可以更改 TriggerJob 的调用站点以创建一个简单的触发器(可能是允许定义策略的扩展方法),TriggerJob 的 Quartz 源 is here

    【讨论】:

    • 谢谢你的想法。
    • 我已将我的实现添加到问题中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多