上一篇關於任務調度Quartz.Net的文章中介紹了其三個核心對象IScheduler、IJob和ITrigger,我們已經知道了其基本的使用方法,可以在控制台當中運行監控。但是在實際中我們往往需要有一個可視化的管理界面來人工介入監控我們的定時任務。
所以這篇文章就將如何添加可視化界面做一下介紹。
首先新建一個web項目,其框架為.Net Framework4.5.2,然后需要添加引入Quartz和CrystalQuartz.Remote兩個Nuget包。之后我們可以在項目的web.config中看到其為我們添加了以下的一些節點。其中添加的 handler 用來處理我們訪問路徑 CrystalQuartzPanel.axd時的處理程序,而provider中提供的端口8008則是用來做此web與quartz中的scheduler通信的端口。
<configSections> <sectionGroup name="crystalQuartz" type="CrystalQuartz.Web.Configuration.CrystalQuartzConfigurationGroup"> <section name="provider" type="CrystalQuartz.Web.Configuration.ProviderSectionHandler" requirePermission="false" allowDefinition="Everywhere" /> </sectionGroup> </configSections> <handlers> <add name="CrystalQuartzPanel" verb="*" path="CrystalQuartzPanel.axd" type="CrystalQuartz.Web.PagesHandler, CrystalQuartz.Web" /> </handlers> <crystalQuartz> <provider> <add property="Type" value="CrystalQuartz.Core.SchedulerProviders.RemoteSchedulerProvider, CrystalQuartz.Core" /> <!-- Edit scheduler host value below =================================== --> <add property="SchedulerHost" value="tcp://localhost:8008/QuartzScheduler" /> <!-- =================================== --> </provider> </crystalQuartz>
那么Quartz.Net中的Scheduler如何與其通信呢?在StdSchedulerFactory的構造函數中有一個帶參構造函數,可以通過配置一些屬性來實現。
public StdSchedulerFactory(NameValueCollection props)
具體屬性設置如下
public class ScheduleManager { public async static Task<IScheduler> BuildScheduler() { var properties = new NameValueCollection(); properties["quartz.scheduler.instanceName"] = "后台作業監控系統"; // 設置線程池 properties["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz"; properties["quartz.threadPool.threadCount"] = "5"; properties["quartz.threadPool.threadPriority"] = "Normal"; // 遠程輸出配置 properties["quartz.scheduler.exporter.type"] = "Quartz.Simpl.RemotingSchedulerExporter, Quartz"; properties["quartz.scheduler.exporter.port"] = "8008"; properties["quartz.scheduler.exporter.bindName"] = "QuartzScheduler"; properties["quartz.scheduler.exporter.channelType"] = "tcp"; var schedulerFactory = new StdSchedulerFactory(properties); IScheduler _scheduler = await schedulerFactory.GetScheduler(); return _scheduler; } }
然后通過ScheduleManager.BuildScheduler()來創建IScheduler,結合上篇文章介紹的就可以通過可視化界面來監控和管理我們的定時任務了。