我(wo)心中的核(he)心組件(可插拔的AOP)~調(diao)度組件quartz.net續~任(ren)務管理器的開發
對于(yu)任(ren)(ren)務調度(du)來說(shuo),越(yue)(yue)來越(yue)(yue)多的團隊選擇了quartz,它(ta)在java和.net環境下表(biao)現(xian)都十分優秀,配(pei)置(zhi)(zhi)簡單,功能強大(da),時間表(biao)達式(shi)配(pei)置(zhi)(zhi)靈活(huo),但在使用(yong)時,還是感覺缺點什么,怎(zen)么說(shuo),你在服務器上(shang)安(an)裝了一(yi)(yi)(yi)個任(ren)(ren)務,然后然它(ta)們去(qu)運行(xing),我(wo)們在客戶(hu)端或者一(yi)(yi)(yi)個web網(wang)站里,如果(guo)對服務端的任(ren)(ren)務進行(xing)管理(li)呢,這是一(yi)(yi)(yi)個大(da)難題,而今天我(wo)要寫的就是如何去(qu)實現(xian)這樣一(yi)(yi)(yi)個任(ren)(ren)務管理(li)器!
小知識
quartz為我們(men)提供了遠(yuan)程模式(shi),即可以(yi)監聽一個端(duan)口,用來等(deng)待(dai)客戶端(duan)去調用,呵(he)呵(he)
CrystalQuartz用來創建遠程鏈接對象
private static RemoteSchedulerProvider remoteSchedulerProvider = new CrystalQuartz.Core.SchedulerProviders.RemoteSchedulerProvider(); remoteSchedulerProvider.SchedulerHost = System.Configuration.ConfigurationManager.AppSettings["SchedulerHost"];
效果預覽
說做就做
/// <summary> /// 恢復(fu)開始任務 /// </summary> /// <param name="jobName"></param> /// <param name="group"></param> /// <returns></returns> public ActionResult Start(string jobName, string group) { remoteSchedulerProvider.Scheduler.ResumeJob(new JobKey(jobName, group)); return RedirectToAction("Index"); } /// <summary> /// 暫停(ting)任(ren)務 /// </summary> /// <param name="jobName"></param> /// <param name="group"></param> /// <returns></returns> public ActionResult Stop(string jobName, string group) { remoteSchedulerProvider.Scheduler.PauseJob(new JobKey(jobName, group)); return RedirectToAction("Index"); }
上面代(dai)碼可以實現界(jie)面中的(de)“開始”和暫停(ting)“兩(liang)個功能(neng),主要(yao)是對trigger進行控制的(de),值(zhi)得注意的(de)是,如果你修改(gai)的(de)時間表達式,需要(yao)從新啟動服務才會生效!