定时调度系列之Quartz.Net详解
一. 背景
我們在日常開發中,可能你會遇到這樣的需求:"每個月的3號給用戶發信息,提醒用戶XXX "、"每天的0點需要統計前一天的考勤記錄"、"每個月的1號計算上個月的庫存情況"、"定時初始化數據供其它業務使用"、"每隔2分鐘輪詢查數據庫看某業務是否被審核通過,并提示用戶"?等等。
以上需求在開發中都非常常見,但它們僅僅屬于低端一點的需求,稍高端一點的需求比如:" 客服派車給調度,如果調度3天內沒有執行任何操作,需要提示調度要抓緊派車了 ",到這一步為止看起來和上面的需求并沒有什么兩樣,但如果我要求,系統管理員可以動態配置提示時間呢?即管理員可以配置調度幾天沒有執行任何操作,系統需要給出提示。這么一改的話,對于一些新手而已,難度就陡然上升了。
下面我們接著升級需求,系統中有A、B、C、D。。。。等等多個業務,系統管理員可以動態配置每個業務的執行時間情況(如:每隔2s執行一次、每月3號執行一次等等),并且可以動態的控制每個業務的開啟、關閉、暫停、全部關閉、全部暫停等。需求升級到這個程度,估計新手就抓蝦了,有一定經驗的人但是沒有接觸過類似框架,面對這樣的需求,也需要一點時間去研究。
解惑:
需求1:也就是我們常說的定時任務,簡答一點的可以借助Timer類來實現,對時間要求復雜的需要借助第三方的框架來實現,如:Quartz.Net.
需求2:需要我們動態配置定時任務的執行時間。
需求3:需要我們自己搭建一個定時調度框架,然后來動態配置任務的開啟、關閉和觸發器的情況。
? 需求三就是我們最終的目標,即我們要搭建一套通用的定時調度框架,可以手動增加定時任務,配置其觸發器,手動控制任務的開啟、關閉(B/S 架構);或者C/S架構,最終部署成windows服務的形式。
綜上所述:Quartz.Net將是我們的最佳選擇。
?
二. 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、服務類】)?:
原文地址:https://www.cnblogs.com/yaopengfei/p/9216229.html
.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com
總結
以上是生活随笔為你收集整理的定时调度系列之Quartz.Net详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 好代码是管出来的——使用Git来管理源代
- 下一篇: RyuJIT的华丽转身