上一篇关于任务调度Quartz.Net的文章中介绍了其三个核心对象IScheduler、IJob和ITrigger,我们已经知道了其基本的使用方法,可以在控制台当中运行监控。但是在实际中我们往往需要有一个可视化的管理界面来人工介入监控我们的定时任务。
所以这篇文章就将如何添加可视化界面做一下介绍。
首先新建一个web项目,其框架为.Net Framework4.5.2,然后需要添加引入Quartz和CrystalQuartz.Remote两个Nuget包。之后我们可以在项目的web.config中看到其为我们添加了以下的一些节点。其中添加的 handler 用来处理我们访问路径 CrystalQuartzPanel.axd时的处理程序,而provider中提供的端口8008则是用来做此web与quartz中的scheduler通信的端口。
"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,结合上篇文章介绍的就可以通过可视化界面来监控和管理我们的定时任务了。