·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> ASP.NET网站开发 >> Quartz.net使用总结

Quartz.net使用总结

作者:佚名      ASP.NET网站开发编辑:admin      更新时间:2022-07-23

Quartz.net使用总结

进来项目中用到了 任务调度 来实现短信发送网关,所以这里分享下Quartz.net 的使用经验。任务调度选用了 Quartz.net 来实现,之前用的是C#中自带的window服务安装,这次也打算用Topshel来做window服务,其实感觉差不多。ok,接下来说下 Quartz.net 在开发中的使用:

Quartz.NET简介

作业调度的目标在于按照预先确定的时间和指定的顺序来确保高效的数据处理流程,从而最大限度的使用系统资源。批处理流程是一种在无需最终用户干预的方式下在后台通过顺序方式运行的操作。

Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,支持cron-like表达式等等。

Quartz.NET 是一个开源的作业调度框架,它可以被在小型应用程序甚至是企业级的应用程序。它有如下几个特点:

  • API 操作简单,只要几行简单的代码你就可以在应用程序里面实现自己的作业调度,并实时监视作业执行情况
  • 触发器功能强大,比 Windows 的任务计划提供更细的触发粒度,你可以使用“Cron表达式(后文将介绍)”来实现如:每周星期一到星期五 8:00am,5:00pm(工作时间) 执行某一件任务
  • 良好的可扩展性,它基于接口编程,你可以实现自己的 Schedule 调度器,Job 作业,以及 Trigger 触发器等
  • 作业可以保存在 RAM 中,也可以持久化到数据库,支持多种数据库类型:SqlServer、Oracle、MySQL等
  • 集群,这是一个高级应用,可以在多台计算机之间创建负载平衡、容错处理

Quartz.NET使用

首先引用下面的dll

前4个是Quartz.NET使用所必须的,Toshelf是用来做window服务所用的

添加QuartzHelp类库

添加JobDemo.cs,实现IJob接口。

 1 namespace QuartzHelp 2 { 3     public class JobDemo : IJob 4     { 5         //日志对象 6         PRivate static readonly ILog logger = LogManager.GetLogger(typeof(JobDemo)); 7  8         public void Execute(IJobExecutionContext context) 9         {10             logger.Info("JobDemo开始运作,模拟处理200ms的程序");11             Thread.Sleep(200);12             logger.Info("JobDemo处理完");13         }14     }15 }
View Code

添加WindowControl 控制台

添加Service.cs文件,作为任务调度的入口

 1 namespace WindowControl 2 { 3     public class Service 4     { 5         private readonly ILog logger; 6         private IScheduler scheduler; 7         public Service() 8         { 9             logger = LogManager.GetLogger(typeof(Service));10             ISchedulerFactory schedulerFactory = new StdSchedulerFactory();11             scheduler = schedulerFactory.GetScheduler();12         }13 14         public void Start()15         {16             scheduler.Start();17             logger.Info("Quartz服务成功启动");18         }19 20         public void Stop()21         {22             scheduler.Shutdown(true);23             logger.Info("Quartz服务成功终止");24         }25 26     }27 }
View Code

在Program.cs文件中,启动任务调度

 1 namespace WindowControl 2 { 3     class Program 4     { 5         static void Main(string[] args) 6         { 7             HostFactory.Run(x => 8             { 9                 x.Service<Service>((s) =>10                 {11                     s.SetServiceName("ser");12                     s.ConstructUsing(name => new Service());13                     s.WhenStarted((t) => t.Start());14                     s.WhenStopped((t) => t.Stop());15                 });16 17                 x.RunAsLocalSystem();18 19                 //服务的描述20                 x.SetDescription("任务服务安装测试");21                 //服务的显示名称22                 x.SetDisplayName("MyDisplayName");23                 //服务名称24                 x.SetServiceName("MyServiceName");25 26             });27         }28     }29 }
View Code

添加配置文件

新建一个Configs的文件夹,首先添加quartz_jobs.xml(作为 调度任务 的配置文件)

 1 <?xml version="1.0" encoding="UTF-8"?> 2  3 <!-- This file contains job definitions in schema version 2.0 format --> 4  5 <job-scheduling-data xmlns="http://quartznet.sourceforge.net/JobSchedulingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0"> 6  7   <processing-directives> 8     <!-- 在计划作业和触发器是应遵循的命令和原则 --> 9     <overwrite-existing-data>true</overwrite-existing-data>10   </processing-directives>11 12   <schedule>13     <job>14       <name>myJob</name>15       <group>myJobGroup</group>16       <description>第一个工作任务</description>17       <job-type>QuartzHelp.JobDemo, QuartzHelp</job-type>18       <durable>true</durable>19       <recover>false</recover>20     </job>21     <trigger>22       <cron>23         <name>Trigger</name>24         <group>TriggerGroup</group>25         <description>Simple trigger to simply fire sample job</description>26         <job-name>myJob</job-name>27         <job-group>myJobGroup</job-group>28         <!--每10秒中执行一次-->29         <cron-expression>0/01 * * * * ?</cron-expression>30       </cron>31     </trigger>32   </schedule>33 </job-scheduling-data>
View Code

quartz_jobs.xml配置项说明:

 1 <?xml version="1.0" encoding="utf-8" ?> 2 <!-- This file contains job definitions in schema version 2.0 format --> 3  4 <!--在2.0版本中根结点由<quartz> 变为了<job-scheduling-data>--> 5  <job-scheduling-data xmlns="http://quartznet.sourceforge.net/JobSchedulingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0"> 6  7    <!--保持默认配置即可,具体作用有待研究--> 8    <processing-directives> 9     <overwrite-existing-data>true</overwrite-existing-data>10   </processing-directives>11 12    <!--任务调度集合-->13    <schedule>14      <!--2.0版本中的job相当于1.x版本中的<job-detail>,这个节点是用来定义每个具体的任务的,多个任务请创建多个job节点即可-->15      <job>16        <!--任务名称,同一个group中多个job的name不能相同,若未设置group则所有未设置group的job为同一个分组(必须设置)-->17        <name>sampleJob</name>18        <!--任务所属分组,用于标识任务所属分组-->19        <group>sampleGroup</group>20        <!--工作任务的描述,用于描述任务具体内容-->21       <description>Sample job for Quartz Server</description>22        <!--任务类型,任务的具体类型及所属程序集,格式:实现了IJob接口的包含完整命名空间的类名,程序集名称-->23        <job-type>Quartz.Server.SampleJob, Quartz.Server</job-type>24        <!--<durable>(持久性)-如果一个Job是不持久的, 一旦没有触发器与之关联,它就会被从scheduler 中自动删除-->25       <durable>true</durable>26       <recover>false</recover>27