定時調度系列之Quartz.Net詳解

一. 背景html

  咱們在平常開發中,可能你會遇到這樣的需求:"每月的3號給用戶發信息,提醒用戶XXX "、"天天的0點須要統計前一天的考勤記錄"、"每月的1號計算上個月的庫存狀況"、"定時初始化數據供其它業務使用"、"每隔2分鐘輪詢查數據庫看某業務是否被審覈經過,並提示用戶" 等等。數據庫

  以上需求在開發中都很是常見,但它們僅僅屬於低端一點的需求,稍高端一點的需求好比:" 客服派車給調度,若是調度3天內沒有執行任何操做,須要提示調度要抓緊派車了 ",到這一步爲止看起來和上面的需求並無什麼兩樣,但若是我要求,系統管理員能夠動態配置提示時間呢?即管理員能夠配置調度幾天沒有執行任何操做,系統須要給出提示。這麼一改的話,對於一些新手而已,難度就陡然上升了。windows

  下面咱們接着升級需求,系統中有A、B、C、D。。。。等等多個業務,系統管理員能夠動態配置每一個業務的執行時間狀況(如:每隔2s執行一次、每個月3號執行一次等等),而且能夠動態的控制每一個業務的開啓、關閉、暫停、所有關閉、所有暫停等。需求升級到這個程度,估計新手就抓蝦了,有必定經驗的人可是沒有接觸過相似框架,面對這樣的需求,也須要一點時間去研究。服務器

解惑:架構

  需求1:也就是咱們常說的定時任務,簡單一點的能夠藉助Timer類來實現,對時間要求複雜的須要藉助第三方的框架來實現,如:Quartz.Net.框架

  需求2:須要咱們動態配置定時任務的執行時間。asp.net

  需求3:須要咱們本身搭建一個定時調度框架,而後來動態配置任務的開啓、關閉和觸發器的狀況。學習

   需求三就是咱們最終的目標,即咱們要搭建一套通用的定時調度框架,能夠手動增長定時任務,配置其觸發器,手動控制任務的開啓、關閉(B/S 架構);或者C/S架構,最終部署成windows服務的形式。ui

  綜上所述:Quartz.Net將是咱們的最佳選擇。spa

 

二. Quartz.Net簡介

 1. Quartz.Net是一個強大、開源、輕量的做業調度框架,是 OpenSymphony 的 Quartz API 的.NET移植,用C#改寫,可用於winform和asp.net應用中。它靈活而不復雜。你可以用它來爲執行一個做業而建立簡單的或複雜的做業調度。

它有幾大優點:

  a.持久化數據庫:SQLServer、MySQL、MongoDB、Redis

  b.集羣支持:雙機熱備

  c.支持Web B/S架構和WinForm C/S架構

  d.trigger能夠靈活的控制時間各種苛刻的時間要求

2. Quartz.Net框架的使用

①.引入方式:

  a. 經過NuGet引入搜索Quartz引入相應的程序集。

  (2.x版本須要引入三個程序集:Common.Logging、Common.Logging.Core、Quartz和一個xsd文件(用於xml配置進行代碼提示)

  b. 去官網下載源碼,經過引入源碼的形式進行使用(http://www.quartz-scheduler.net/)。

  PS:目前最新版本爲3.0.5(2018-06-23),這裏採用的是2.6.1 即2x的最後一個版本,3x起支持.netcore,且基本用法發生一些變化,最好使用vs2017

②.基本使用:

  a.建立做業調度池(Scheduler)

  b.建立一個具體的做業即job (具體的job須要單獨在一個文件中執行)

  c.建立並配置一個觸發器即trigger 

  d.將job和trigger加入到做業調度池中

  e.開始調度 start

3. 官方地址

  官網:http://www.quartz-scheduler.net/

  示例:http://www.quartz-scheduler.net/documentation/quartz-2.x/quick-start.html

 

三. 系列章節

   下面咱們將一塊兒經過如下幾個章節,系統的學習一下Quartz.Net的基本用法、擴展一些高級配置,而且最終從框架的角度來處理定時調度這一類通用的問題,歡迎廣大博友前來交流、指正、學習。

       第一節: Timer的定時任務的複習、Quartz.Net的入門使用、Aop思想的體現  :

         第二節: 比較DateTime和DateTimeOffset兩種時間類型並介紹Quartz.Net中用到的幾類時間形式(定點、四捨五入、倍數、遞增)      

         第三節: Quartz.Net五大構件之Scheduler(建立、封裝、基本方法)和Job(建立、關聯等) :

         第四節: Quartz.Net五大構件之Trigger通用用法(經常使用方法、優先級、與job關聯等) :

         第五節: Quartz.Net五大構件之Trigger的四大觸發類 :

         第六節: 六類Calander處理六種不一樣的時間場景 :

         第七節:Trigger(SimpleTrigger、CronTrigger)啞火(MisFire)策略 :

         第八節: Quartz.Net五大構件之SimpleThreadPool及其四種配置方案 :

         第九節: 利用RemoteSheduler實現Scheduler跨服務器的遠程控制 :

         第十節: 利用SQLServer實現Quartz的持久化和雙機熱備的集羣模式 :

         第十一節: 封裝通用的定時調度框架,實現新增、刪除、開啓、暫停計劃任務(未完):

         第十二節: 總結Quartz.Net幾種部署模式(IIS、Exe、服務部署【藉助TopSelf、服務類】) :

        

 

!

  • 做       者 : Yaopengfei(姚鵬飛)
  • 博客地址 : http://www.cnblogs.com/yaopengfei/
  • 聲     明1 : 本人才疏學淺,用郭德綱的話說「我是一個小學生」,若有錯誤,歡迎討論,請勿謾罵^_^。
  • 聲     明2 : 原創博客請在轉載時保留原文連接或在文章開頭加上本人博客地址,如需代碼請留下你的郵箱
相關文章
相關標籤/搜索