Quartz.NET

半城伤御伤魂 提交于 2021-02-09 12:05:24

译者注: 目录在这 Quartz.NET 3.x 教程 原文在这 Lesson 7: TriggerListeners and JobListeners

监听器是为调度程序中发生的事件执行操作而创建的对象. 如你所猜, TriggerListeners 接收和触发器相关的事件, JobListeners 接收作业相关的事件.

触发器相关的事件包括: 触发器触发, 触发器误触发 (在本文档的 "触发器" 部分有说到), 以及触发器完成 (触发器触发的作业已完成).

ITriggerListener 接口:

public interface ITriggerListener
{
    string Name { get; }

    Task TriggerFired(ITrigger trigger, IJobExecutionContext context);

    Task<bool> VetoJobExecution(ITrigger trigger, IJobExecutionContext context);

    Task TriggerMisfired(ITrigger trigger);
    
    Task TriggerComplete(ITrigger trigger, IJobExecutionContext context, int triggerInstructionCode);
}

与作业相关的事件包括: 作业即将执行的通知, 以及作业已完成执行的通知.

IJobListener 接口

public interface IJobListener
{
    string Name { get; }

    Task JobToBeExecuted(IJobExecutionContext context);

    Task JobExecutionVetoed(IJobExecutionContext context);

    Task JobWasExecuted(IJobExecutionContext context, JobExecutionException jobException);
}

使用自己实现的监听器

要创建一个监听器, 只需要创建一个对象并实现 ITriggerListener 和/或 IJobListener 接口. 然后在调度程序运行时监听器会被注册, 并且必须被赋予一个名称 (更确切的说, 她们必须通过名称属性来公布自己名称).

为了方便起见, 您的类也可以扩展 JobListenerSupport 或 TriggerListenerSupport 并简单重写您感兴趣的事件, 而不用实现这些接口.

监听器会和一个匹配器一起注册到调度程序的 ListenerManager 中该匹配器描述了监听器希望接收哪个作业/触发器事件.

监听器在调度程序运行时被注册, 并且不与作业和触发器一样存储在 JobStore 中. 这是因为监听器通常是与应用程序集成点. 因此, 每次运行您的应用程序, 需要向调度程序重新注册监听器.

添加一个对特定作业感兴趣的 JobListener:

scheduler.ListenerManager.AddJobListener(myJobListener, KeyMatcher<JobKey>.KeyEquals(new JobKey("myJobName", "myJobGroup")));

添加一个对特定组所有作业感兴趣的 JobListener:

scheduler.ListenerManager.AddJobListener(myJobListener, GroupMatcher<JobKey>.GroupEquals("myJobGroup"));

添加一个对特定两个组所有作业感兴趣的 JobListener:

scheduler.ListenerManager.AddJobListener(myJobListener, OrMatcher<JobKey>.Or(GroupMatcher<JobKey>.GroupEquals("myJobGroup"), GroupMatcher<JobKey>.GroupEquals("yourGroup")));

添加一个对所有作业感兴趣的 JobListener:

scheduler.ListenerManager.AddJobListener(myJobListener, GroupMatcher<JobKey>.AnyGroup());

大多数用户不需要使用 Quartz.NET 的监听器, 但是当应用程序有创建事件通知需求时监听器非常好用, 除非作业本身没有明确的通知应用程序 .

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!