Quartz.net 開源job調度框架(一)

Quartz.NET是一個開源的做業調度框架,很是適合在平時的工做中,定時輪詢數據庫同步,定時郵件通知,定時處理數據等。 html

Quartz.NET容許開發人員根據時間間隔(或天)來調度做業。它實現了做業和觸發器的多對多關係,還能把多個做業與不一樣的觸發器關聯。數據庫

整合了 Quartz.NET的應用程序能夠重用來自不一樣事件的做業,還能夠爲一個事件組合多個做業。windows

 

官方學習文檔:http://www.quartz-scheduler.net/documentation/index.html瀏覽器

使用實例介紹:http://www.quartz-scheduler.net/documentation/quartz-2.x/quick-start.html服務器

官方的源代碼下載:http://sourceforge.net/projects/quartznet/files/quartznet/   app

下面將結合個人項目中的使用給你們分享一下框架

  • 爲何要使用Quartz?

     咱們常常會有這樣的應用場景:須要定時輪詢某些符合條件的數據,在達到必定條件的時候,對數據作出必定的處理,好比:電商平臺要搞促銷活動,設定好活動開始時間,在到達開始時間的時候定時推一些促銷信息到網站前臺。這時咱們經常使用的方法有:windows service,console job等等方式來處理,本文以Quartz調度console job來實現。性能

    項目的整體思路是:用Windows Service把主程序Host起來,而後經過Quartz.net的可視化界面控制Job的執行和調度學習

首先建立Console Job程序,下載Quartz相關的包(Quartz.NET,CrystalQuartz.Remote),經過Nuget安裝的話,相關依賴包會自動下載。網站

使用這個框架的最大的好處就是業務便於橫向擴展,好比目前根據業務來講我有兩個實現的功能,一個是搶購的商品到時間以後定時上下架,還有一個是超時訂單15分鐘未支付自動做廢,我在項目中新建兩個文件夾,放各自的業務處理類,其餘的都是公用的。

接下來看具體的實現:

程序主入口用Service Run起來。

JobManager是添加的系統組建,裏面的實現以下:

ServiceBase中的代碼很關鍵,起到配置線程池的做用,這個地方設置線程池信息是整個框架在調度的時候通用的配置

新建一個做業調度的基類:JobService,實現以下:

 

主要用於設置Job的名稱,做業組的名稱,還有給調度器中添加每個做業信息和各自的觸發器信息

接下來基本的配置實現已經完成了,咱們來看看具體的做業是怎麼實現的?

各自的業務處理模塊的模板都和這個相似,具體可根據本身的習慣來實現。關於觸發器的配置還有另一種作法,就是經過配置文件來實現,你們能夠百度一下。

業務處理類中就根據各自不一樣的業務作具體的實現了,代碼以下:

項目中紀錄Log(這個很重要,很是重要)使用Nlog,數據庫訪問使用Dapper(輕量級的ORM,特別好用,性能也很好)

Job的工做已經基本完成了,接下來要作就是把添加安裝文件,將Job作成Windows Service安裝到服務器了,這個步驟就再也不囉嗦了(若是不知道的童鞋能夠百度,或者聯繫我要源碼)

下面咱們還剩最後一步,就是開始咱們說的可視化控制,截至到目前咱們作的都是不可見的服務,怎麼用可視化的界面呈現給用戶呢?繼續往下

新建一個空的ASP.NET WebSite,安裝CrystalQuartz.Remote 包,這個可使得你在Web站點裏面訪問到框架生成的可視化界面。

安裝完包以後咱們能夠看到在WebConfig中添加了相關的配置,最重要的就是SchedulerHost這個配置,這個地方指定的端口號就是咱們在最開始建立線程池的時候制定的Port,兒地址就是咱們當前服務器部署的地址了,須要說明的一點就是咱們的Windows Service部署的服務器和WebSite部署的站點是要在同一個服務器上的。

 

接下來就是啓動將新建的網站部署到IIS,開啓WindowsService,而後在瀏覽器裏面瀏覽新的站點,在默認的端口後面直接輸入:/CrystalQuartzPanel.axd 就看訪問了

看到這麼清爽的界面,非常激動人心啊,咱們不用本身開發可視化的Job調度框架就能夠經過界面來控制咱們的服務了,是否是很心動呢?

心動不如行動啊,筒子們若是有想法就動手實踐一下,我差很少用了3個小時左右的時間來實踐了一下。Quartz框架中的其餘功能暫時還沒研究。

若是在實現過程當中有什麼問題能夠給我留言,我把源碼共享出來,你們一塊兒研究,學習~~

相關文章
相關標籤/搜索