Quartz 是什麼? Quartz 是作業調度系統,可以集成進其他軟體系統。這裡【作業調度程式】一詞是指,在預定義時間執行(或通知)其他組件的系統。 Quartz 有什麼優點? 靈活,有多種使用方式,可混合使用 輕量,只需很少的配置 容錯性好 具有持久化功能,程式重啟時,可記住已計劃的任務 Qua ...
Quartz 是什麼?
Quartz 是作業調度系統,可以集成進其他軟體系統。這裡【作業調度程式】一詞是指,在預定義時間執行(或通知)其他組件的系統。
Quartz 有什麼優點?
- 靈活,有多種使用方式,可混合使用
- 輕量,只需很少的配置
- 容錯性好
- 具有持久化功能,程式重啟時,可記住已計劃的任務
Quartz的主要介面?
Quartz 以 dll 形式分發,主要介面有
- Schedular 介面:它提供的功能有:調度/取消調度作業,開始,停止,暫停。
- Job介面:用於自定義執行邏輯。
- TriggerListener 或 JobListener 介面:用於接收通知。
為什麼不使用 System.Timers.Timer?
- Timer沒有持久化機制
- Timer的調度功能沒有彈性,僅能定時觸發
- Timer不能利用線程池,每個Timer一個線程
- Timer沒有管理功能,需要自己組織任務
Quartz 的性能如何?
JobStore 影響性能:基於ADO.NET的JobStore性能不如基於RAM的JobStore,採用AdoJobStore時,大部分時間都花在資料庫交互上,RAMJobStore比AdoJobStore快1000倍以上,但存儲的作業和觸發器數量沒有AdoJobStore多。
偵聽器影響性能:使用大量偵聽器會降低quartz性能,例如,TriggerListener, JobListener和 SchedulerListener,一些插件實際上也是偵聽器,例如歷史插件。花在偵聽器的時間沒有用於實際作業。優先使用局部偵聽器,而非全局偵聽器。在偵聽器中儘量不要執行昂貴操作。
Quartz能同時執行多少任務?
quartz能同時執行的作業數受線程池大小影響,例如,線程池中只有5個線程池時,最多可以執行5個任務。
如何控製作業對象的實例化?
參考 Quartz.Spi.IJobFactory 介面和 Quartz.IScheduler.JobFactory 屬性。
如何使孤兒作業不被刪除?
孤兒作業是指沒有觸發器引用的作業。將 JobDetail.Durable 屬性設為true,可使quartz不刪除孤兒作業。
如何禁止併發作業?
使用 DisallowConcurrentExecutionAttribute 可禁止作業併發執行。
如何停止正在執行的作業?
參考IJobExecutionContext 的 CancellationToken.IsCancellationRequested 屬性。
如果組織鏈式作業?
- 方法1,使用偵聽器(例如 TriggerListener, JobListener 或 SchedulerListener) ,在完成時發出通知,開始下一個作業。
- 方法2,在 JobDataMap 中指定下一個要觸發的作業名,在作業完成時觸發。
觸發器為什麼不觸發?
- 最常見原因是沒有調用Scheduler.Start()方法
- 其次是觸發器或觸發器組被暫停
IIS 中如何保持調度不停止?
IIS 會回收應用程式池,調度程式將停止。如果使用的IIS8,可配置IIS始終運行:
- 網站:【預載入已啟用】設為【True】
- 應用程式池:【啟動模式】設為【AlwaysRunning】