一、介紹
今天開始學習監聽器,就是 Listener,在Quartz.Net 中,主要包含3類的監聽器,主要內容包括:TriggerListener 、JobListener 和 SchedulerListener 這三個東東的內容,這個東西不是很難,內容也不是很多,大家學習起來會很輕松。廢話少說,開始我們今天的學習吧。
二、TriggerListener 、JobListener 和 SchedulerListener
偵聽器是根據調度器中發生的事件創建來執行操作的對象。正如您可能猜到的,TriggerListeners接收與觸發器相關的事件,JobListeners接收與作業相關的事件。
1、與觸發器相關的事件包括:觸發器觸發,觸發錯誤觸發(在本文檔的“觸發器”部分中討論)和觸發器完成(觸發器觸發的作業完成)。
ITriggerListener 接口
1 public interface ITriggerListener 2 { 3 string Name { get; } 4 5 Task TriggerFired(ITrigger trigger, IJobExecutionContext context); 6 7 Task<bool> VetoJobExecution(ITrigger trigger, IJobExecutionContext context); 8 9 Task TriggerMisfired(ITrigger trigger); 10 11 Task TriggerComplete(ITrigger trigger, IJobExecutionContext context, int triggerInstructionCode); 12 }
2、與 Job 相關的事件包括:Job 即將執行的通知,以及 Job 完成執行時的通知。
IJobListener 接口
1 public interface IJobListener 2 { 3 string Name { get; } 4 5 Task JobToBeExecuted(IJobExecutionContext context); 6 7 Task JobExecutionVetoed(IJobExecutionContext context); 8 9 Task JobWasExecuted(IJobExecutionContext context, JobExecutionException jobException); 10 }
3、使用自己的監聽器
要創建偵聽器,只需創建一個實現 ITriggerListener 或 IJobListener 接口的對象。然后在運行時向調度程序注冊偵聽器,並且必須給偵聽器一個名稱(或者更確切地說,它們必須通過Name屬性來宣傳自己的名稱)。
為了方便起見,您的類還可以擴展 JobListenerSupport 或 TriggerListenerSupport 類並簡單地覆蓋您感興趣的事件,而不是實現那些接口。
偵聽器與Matcher一起向調度程序的ListenerManager注冊,Matcher描述偵聽器想要為哪些作業/觸發器接收事件。
偵聽器在運行時向調度程序注冊,並且不與作業和觸發器一起存儲在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用戶不使用偵聽器,但是當應用程序要求創建事件通知的需要時,無需Job本身顯式地通知應用程序,偵聽器非常方便。
4、SchedulerListeners
SchedulerListener 與 ITriggerListener 和 IJobListener 非常相似,只是它們接收到調度器本身中的事件的通知——不一定與特定觸發器或作業相關的事件。
與調度程序相關的事件包括:添加作業/觸發器,刪除作業/觸發器,調度程序中的嚴重錯誤,調度程序關閉的通知等。
ISchedulerListener 接口
1 public interface ISchedulerListener 2 { 3 Task JobScheduled(Trigger trigger); 4 5 Task JobUnscheduled(string triggerName, string triggerGroup); 6 7 Task TriggerFinalized(Trigger trigger); 8 9 Task TriggersPaused(string triggerName, string triggerGroup); 10 11 Task TriggersResumed(string triggerName, string triggerGroup); 12 13 Task JobsPaused(string jobName, string jobGroup); 14 15 Task JobsResumed(string jobName, string jobGroup); 16 17 Task SchedulerError(string msg, SchedulerException cause); 18 19 Task SchedulerShutdown(); 20 }
SchedulerListener(調度器偵聽器)在調度器的 ListenerManager 中注冊。SchedulerListener(調度器偵聽器)實際上可以是實現 ISchedulerListener 接口的任何對象。
增加一個SchedulerListener:
scheduler.ListenerManager.AddSchedulerListener(mySchedListener);
刪除一個SchedulerListener:
scheduler.ListenerManager.RemoveSchedulerListener(mySchedListener);
三、總結
好了,今天就寫到這里了。大家感覺應該很輕松,內容不多。還是老規矩,我把英文原文地址發出來,英文好的可以直接看英文,理解的會更好。地址如下:https://www.quartz-scheduler.net/documentation/quartz-3.x/tutorial/trigger-and-job-listeners.html
不忘初心,繼續努力。