监听器是用于根据调度程序中发生的事件执行操作的对象。正如您猜想的那样,TriggerListeners接收与触发器相关的事件,JobListeners接收与作业相关的事件。
与触发相关的事件包括:触发触发(trigger firings),触发失误(trigger mis-firings)(在本文档的“触发”部分讨论)和触发完成(trigger completions)(触发完成的任务)。
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);
}
Using Your Own Listeners
要创建一个监听器,只需创建一个实现对象,即实现ITriggerListener和/或IJobListener接口。然后,监听器在运行时注册到调度器,并且必须给出一个名称(或者说,他们必须通过他们的Name属性宣传他们自己的名字)。
为了您的方便,您的类可以扩展JobListenerSupport类或TriggerListenerSupport类,而不是实现那些接口,并简单地覆盖您感兴趣的事件。
监听器(Listeners)向调度程序的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());
Listeners不被Quartz.NET的大多数用户使用,但当应用程序需求创建事件通知需求时不需要Job本身明确地通知应用程序。