Quartz.NET 架构与源代码分析系列 part 1 :Quartz.NET 入门
概述
作業(yè)調度的目標在于按照預先確定的時間和指定的順序來確保高效的數(shù)據(jù)處理流程,從而最大限度的使用系統(tǒng)資源。批處理流程是一種在無需最終用戶干預的方式下在后臺通過順序方式運行的操作。
Windows XP系統(tǒng)也自帶了“任務計劃”,它是一個簡單任務調度應用,可以在“開始”->“所有程序”->“附件”->“系統(tǒng)工具”->“任務計劃”里找到。如圖1;
圖1.Windows 的任務計劃
Quartz.NET 是一個開源的作業(yè)調度框架,它可以被在小型應用程序甚至是企業(yè)級的應用程序。它有如下幾個特點:
- API 操作簡單,只要幾行簡單的代碼你就可以在應用程序里面實現(xiàn)自己的作業(yè)調度,并實時監(jiān)視作業(yè)執(zhí)行情況
- 觸發(fā)器功能強大,比 Windows 的任務計劃提供更細的觸發(fā)粒度,你可以使用“Cron表達式(后文將介紹)”來實現(xiàn)如:每周星期一到星期五 8:00am,5:00pm(工作時間) 執(zhí)行某一件任務
- 良好的可擴展性,它基于接口編程,你可以實現(xiàn)自己的 Schedule 調度器,Job 作業(yè),以及 Trigger 觸發(fā)器等
- 作業(yè)可以保存在 RAM 中,也可以持久化到數(shù)據(jù)庫,支持多種數(shù)據(jù)庫類型:SqlServer、Oracle、MySql等
- 集群,這是一個高級應用,可以在多臺計算機之間創(chuàng)建負載平衡、容錯處理
使用
最新的版本是1.0 正式版,有 Quartz.2008.sln 和 Quartz.Server.2008.sln(分步式應用,將在下面的系列分析) ,用 Visual Studio 2008 打開 Quartz.2008.sln ,方案如圖2 所示:
圖2. Quartz.NET解決方案
Quartz.NET是核心的 Quartz 庫,它的文件組織結構及作用如圖3所示:
圖3.Quartz.NET文件組織結構
Quartz.NET 的文件組織結構并不遵循一定的規(guī)范,比如“SPI” 文件夾存放調度器、作業(yè)、線程池接口,最外層也放了很多接口,如圖3所示。但是大部分都可以直接辨別出來,所以這不會對我們閱讀代碼造成很大的影響。
下面是一個 Quartz.NET 的簡單例子:
Code//初始化調度器工廠?
ISchedulerFactory?sf?=?new?StdSchedulerFactory();?
//獲取默認調度器?
IScheduler?scheduler?=?sf.GetScheduler();?
//作業(yè)?
JobDetail?job?=?new?JobDetail("計算作業(yè)",?"組1",?typeof(Job1));?
//觸發(fā)器?
SimpleTrigger?trigger?=?new?SimpleTrigger("觸發(fā)器1",?"觸發(fā)器組1",?5,?new?TimeSpan(0,?0,?5));?
//關聯(lián)任務和觸發(fā)器?
scheduler.ScheduleJob(job,?trigger);?
//開始任務?
scheduler.Start();
首先,我們初始化一個標準的調度器工廠 StdSchedulerFactory ,并用 GetScheduler() 方法創(chuàng)建一個調度器。下一步是聲明一個作業(yè)對象 JobDetail,它有3 個參數(shù):作業(yè)名稱、作業(yè)組名稱、作業(yè)的類型。接著,實例化一個 SimpleTrigger 觸發(fā)器對象,SimpleTrigger 類有6 個構造函數(shù),上面例子的 4 個參數(shù)分別為:觸發(fā)器名稱、觸發(fā)器組名稱、循環(huán)執(zhí)行次數(shù)、執(zhí)行間隔。調度器調用 ScheduleJob 方法把作業(yè)對象和觸發(fā)器關聯(lián)起來,打開觸發(fā)器就可以開始作業(yè)了。
要執(zhí)行的作業(yè) Job1 是實現(xiàn)了 IJob 接口的類,IJob 接口只有一個簡單的方法:
Codevoid?Execute(JobExecutionContext?context)
每一個要執(zhí)行的作業(yè)都要繼承 IJob 接口并實現(xiàn) Execute 方法。
下面是Job1 的定義:
Codepublic?class?Job1?:IJob?
{?
?????private?int?i?=?0;?
?????public?void?Execute(JobExecutionContext?context)?
?????{?
????????Console.WriteLine(++i);?
?????}?
}
上面代碼的執(zhí)行結果是連續(xù)輸出6 個1(重復執(zhí)行5次,加上第一次執(zhí)行,一共6 次)。
下一篇我將要介紹 Job 作業(yè)。
思想,原理,技術,應用
參考文章
1.Microsoft 管理解決方案:作業(yè)調度
2.Quartz.NET
?
目錄:Quartz.NET 架構與源代碼分析系列
下一篇:Quartz.NET 架構與源代碼分析系列 part 2 :Job 作業(yè)
轉載于:https://www.cnblogs.com/Doho/archive/2009/03/11/1408886.html
總結
以上是生活随笔為你收集整理的Quartz.NET 架构与源代码分析系列 part 1 :Quartz.NET 入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WinDBG咒语
- 下一篇: asp.net日历控件My97DateP