译者注: 目录在这 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 的监听器, 但是当应用程序有创建事件通知需求时监听器非常好用, 除非作业本身没有明确的通知应用程序 .
来源:oschina
链接:https://my.oschina.net/u/4358626/blog/3585690