Quartz.Net進階之五:TriggerListener 、JobListener 和 SchedulerListener


        一、介紹

            今天開始學習監聽器,就是 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

            不忘初心,繼續努力。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM