很早之前准備寫Quartz系列文章,現在終於能夠實現了。從本篇開始將帶你實現一款自己的任務管理平台。在工作中你曾經需要應用執行一個任務嗎?這個任務每天或每周星期二晚上11:30,或許僅僅每個月的最后一天執行。一個自動執行而無須干預的任務在執行過程中如果發生一個嚴重錯誤,應用能夠知到其執行失敗並嘗試重新執行嗎?你和你的團隊是用.NET編程嗎?如果這些問題中任何一個你回答是,那么你應該使用Quartz.NET調度器。
閱讀目錄
Quartz.NET介紹
Quartz.NET是一個開源的作業調度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#寫成,可用於winform和asp.net應用中。它提供了巨大的靈活性而不犧牲簡單性。你能夠用它來為執行一個作業而創建簡單的或復雜的調度。它有很多特征,如:數據庫支持,集群,插件,支持cron-like表達式等等。下載地址:Quart.Net
舉個實際例子:現在需要實現一款快遞進度查詢的應用,我們肯定是沒有各個快遞廠商的數據庫的,只能利用廠商提供的API接口來獲取數據。好在現在有很多現成的接口集成了各廠商,基於這些基礎。現在客戶提了一個需求,在快遞單進度發生改變時,給我發郵件或者短信提醒。我想很多網上購物的朋友都有這種需求吧,買了一款東西,時不時的查一下進度,期待早點到。那么這個提醒功能就很迫切了,我也是基於自己的這個需求來做的TaskManager開源項目。
Cron表達式
Cron表達式是用來指定任務執行頻率的,前面我已經寫了一篇Quartz Cron表達式 在線生成器的文章,大家可以直接拿來使用。
開源TaskManager介紹及實現原理
TaskManager是基於Quartz.NET的一款開源任務管理系統,使用Window服務來承載。目前系統集成了四個常用任務,代理IP爬蟲,快遞進度,消息通知,動態修改Job任務。
代理IP爬蟲:每隔一小時從網站上爬取最新的代理IP信息,爬下來的數據存在p_IPProxy表,有了這些代理IP以后,可以用來做投票機,刷接口之類的應用了。相信你肯定遇到過同學或同事發給你一個鏈接讓你幫忙給XX投個票之類的問題,但是呢很多投票都限制了一個IP只能投一票,那么有了許多代理IP你就可以實現一個人投N票了。關於使用代理IP請求接口獲取數據的實例,將在下一篇文章為大家介紹。
快遞進度:這對熱衷於網購的朋友來說是一大福音,當然對我來說也是如此。經常網購的朋友最大的困擾可能就是我的快遞到哪兒啦,時不時打開客戶端查一下快遞進度,要是有快遞進度改變能夠發短信或者郵件提醒的功能就好了,我就再也不用着急查快遞到哪兒了。來看一下郵件提醒效果,有沒有很激動,很想使用這個開源TaskManager平台啦!
消息通知:消息通知相關表p_Message(待發送消息表),p_MessageHistory(已發送或者發送失敗消息表)
目前快遞任務有信息變更會插入一條消息,消息通知任務3分鍾輪詢一次p_Message表,對於每個消息最多會進行三次發送(前兩次都失敗),發送完成將p_Message數據插入到p_MessageHistory
動態修改Job:每個5分鍾會讀取配置文件TaskConfig.xml看是否有新增,修改,刪除的任務,然后動態調整當前運行的任務。無需重啟Windows就可以實現任務的添加。
項目結構介紹:項目是基於Quartz.NET的windows服務,目前包含六個項目
系統原理解析:
開發模式:
添加一個新任務步驟如下
1.在Mysoft.Task項目TaskSet文件夾下添加繼承IJob接口的任務類,可以參照現有的IpProxyJob
2.修改TaskConfig.xml配置文件
最重要的部分運行頻率CronExpressionString需要怎么寫?這里也替大家考慮到了,可以使用在線Cron生成器來生成,地址http://jason.hahuachou.com/cron/index.htm,也可以使用源代碼里面提供的Cron自己部署站點使用。
使用介紹
介紹完了功能和實現原理,現在介紹怎么使用TaskManager。由於是使用Windows服務做為承載器,那么我們只需要知道怎么安裝Windows服務,也就能使用該平台了。這里考慮到很多人不知道怎么安裝卸載Windows服務,所以提供了我之前寫的一個小工具Windows服務安裝卸載。源代碼也一起放在了TaskManager里面。
1.右鍵以管理員方式運行Windows安裝卸載工具
2.選擇TaskManger.exe-》安裝-》運行
運行成功以后可以在系統管理-》服務 里面找到“定時任務管服務”
運行成功后會生成Logs文件夾,目前系統會分任務記錄執行日志,方便使用者查看各個任務的執行情況
當然在使用系統時你需要進行相關配置,下面講一下配置過程。系統的配置文件路徑Config\Config.xml
1.數據庫連接信息
使用者可以拿從SVN下載代碼MyDocument項目下的任務系統”SQL合並腳本_20150911.sql”執行創建相關表和初始數據
修改節點SqlConnect節點的值為你自己的數據庫連接
2.插入快遞單模擬數據
目前使用快遞任務需要自己手工插入快遞單號信息
INSERT INTO dbo.p_ExpressInfo(ExpressNo,ExpressCompanyCode,Receiver) SELECT '880350384879600241' AS ExpressNo,'yuantong' AS ExpressCompanyCode,'youemial@xx.com' AS Receiver
其中youemail@xx.com為接收進度信息變更郵箱地址,只要有進度變更,系統會自動發郵件,記得修改成自己的郵箱地址
ExpressNo:為快遞單號
ExpressCompanyCode:快遞公司Code 該值可從p_ExpressCompany表里面進行查詢
更多使用說明可以參考MyDocument項目下的 使用說明.docx 文檔
總結
本篇要介紹的內容到此結束了,下面寫點我的期待!希望有喜歡的朋友一起來完善TaskManager(完全開源的),使之成為一款能夠提高生活便捷性的工具,添加很多新任務。比如:第二天要下雨或者下雪,發個郵件提醒,帶上雨傘...。好了到了放出源代碼的時間了。敬請期待下一篇!
關於如何下載下面SVN代碼,我這里稍微介紹一下。這個地址不是在瀏覽器里面打開的(如果想在瀏覽器里面預覽可以訪問:http://code.taobao.org/p/TaskManagerPub/src/Branch/),請使用SVN客戶端工具TortoiseSVN->SVN Checkout->輸入下面的地址進行下載。
TaskManagerSVN地址:http://code.taobao.org/svn/TaskManagerPub/Branch 使用svn checkout指令進行下載。
GitHub地址:由於SVN地址不穩定,很多網友下載不下來,所以決定將代碼托管到GitHub https://github.com/CrazyJson/TaskManager
體驗工具下載地址:TaskManager 解壓后文件如下,修改Config.xml數據庫連接,使用WSWinForm進行安裝。