Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等。

Quartz.NET允许开发人员根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。

整合了 Quartz.NET的应用程序可以重用来自不同事件的作业,还可以为一个事件组合多个作业。

官方学习文档:http://www.quartz-scheduler.net/documentation/index.html

使用实例介绍:http://www.quartz-scheduler.net/documentation/quartz-2.x/quick-start.html

官方的源代码下载:http://sourceforge.net/projects/quartznet/files/quartznet/

下面将结合我的项目中的使用给大家分享一下

  • 为什么要使用Quartz?

我们经常会有这样的应用场景:需要定时轮询某些符合条件的数据,在达到一定条件的时候,对数据做出一定的处理,比如:电商平台要搞促销活动,设定好活动开始时间,在到达开始时间的时候定时推一些促销信息到网站前台。这时我们常用的方法有:windows service,console job等等方式来处理,本文以Quartz调度console job来实现。

项目的总体思路是:用Windows Service把主程序Host起来,然后通过Quartz.net的可视化界面控制Job的执行和调度

首先创建Console Job程序,下载Quartz相关的包(Quartz.NET,CrystalQuartz.Remote),通过Nuget安装的话,相关依赖包会自动下载。

使用这个框架的最大的好处就是业务便于横向扩展,比如目前根据业务来说我有两个实现的功能,一个是抢购的商品到时间之后定时上下架,还有一个是超时订单15分钟未支付自动作废,我在项目中新建两个文件夹,放各自的业务处理类,其他的都是公用的。

接下来看具体的实现:

程序主入口用Service Run起来。

JobManager是添加的系统组建,里面的实现如下:

ServiceBase中的代码很关键,起到配置线程池的作用,这个地方设置线程池信息是整个框架在调度的时候通用的配置

新建一个作业调度的基类:JobService,实现如下:

主要用于设置Job的名称,作业组的名称,还有给调度器中添加每一个作业信息和各自的触发器信息

接下来基本的配置实现已经完成了,我们来看看具体的作业是怎么实现的?

各自的业务处理模块的模板都和这个类似,具体可根据自己的习惯来实现。关于触发器的配置还有另外一种做法,就是通过配置文件来实现,大家可以百度一下。

业务处理类中就根据各自不同的业务做具体的实现了,代码如下:

项目中纪录Log(这个很重要,非常重要)使用Nlog,数据库访问使用Dapper(轻量级的ORM,特别好用,性能也很好)

Job的工作已经基本完成了,接下来要做就是把添加安装文件,将Job做成Windows Service安装到服务器了,这个步骤就不再啰嗦了(如果不知道的童鞋可以百度,或者联系我要源码)

下面我们还剩最后一步,就是开始我们说的可视化控制,截至到目前我们做的都是不可见的服务,怎么用可视化的界面呈现给用户呢?继续往下

新建一个空的ASP.NET WebSite,安装CrystalQuartz.Remote 包,这个可以使得你在Web站点里面访问到框架生成的可视化界面。

安装完包之后我们可以看到在WebConfig中添加了相关的配置,最重要的就是SchedulerHost这个配置,这个地方指定的端口号就是我们在最开始创建线程池的时候制定的Port,儿地址就是我们当前服务器部署的地址了,需要说明的一点就是我们的Windows Service部署的服务器和WebSite部署的站点是要在同一个服务器上的。

接下来就是启动将新建的网站部署到IIS,开启WindowsService,然后在浏览器里面浏览新的站点,在默认的端口后面直接输入:/CrystalQuartzPanel.axd 就看访问了

看到这么清爽的界面,很是激动人心啊,我们不用自己开发可视化的Job调度框架就可以通过界面来控制我们的服务了,是不是很心动呢?

心动不如行动啊,筒子们如果有想法就动手实践一下,我差不多用了3个小时左右的时间来实践了一下。Quartz框架中的其他功能暂时还没研究。

如果在实现过程中有什么问题可以给我留言,我把源码共享出来,大家一起研究,学习~~

欢迎关注微信公众平台:上帝派来改造世界的人

Quartz.net 开源job调度框架(一)的更多相关文章

  1. Quartz.net 开源job调度框架(二)----定点执行

    在上一篇  Quartz.net 开源job调度框架(一) 中讲到了基本的使用以及配置job轮训数据执行 这种做法适用于对数据操作实时性要求不高的场景,在实际场景中还有一种比较常用的场景就是我们需要在 ...

  2. Quartz.Net任务统一调度框架

    山寨版Quartz.Net任务统一调度框架   TaskScheduler 在日常工作中,大家都会经常遇到Win服务,在我工作的这些年中一直在使用Quartz.Net这个任务统一调度框架,也非常好用, ...

  3. 山寨版Quartz.Net任务统一调度框架

    TaskScheduler 在日常工作中,大家都会经常遇到Win服务,在我工作的这些年中一直在使用Quartz.Net这个任务统一调度框架,也非常好用,配置简单,但是如果多个项目组的多个服务部署到一台 ...

  4. 开源调度框架Quartz最佳实践

    开源调度框架Quartz最佳实践 Quartz是一个Java调度框架,当前的最新版本为2.2.1. 以Quartz 2.2.1版为例,Quartz最佳实践(用于生产系统)总结如下: 1.跳过更新检查Q ...

  5. Quartz.Net 调度框架配置介绍

    在平时的工作中,估计大多数都做过轮询调度的任务,比如定时轮询数据库同步,定时邮件通知等等.大家通过windows计划任务,windows服务等都实现过此类任务,甚至实现过自己的配置定制化的框架.那今天 ...

  6. Quartz.net(调度框架) 使用Mysql作为存储

    最近公司的做的项目中涉及到配置任务地址然后按照配置去目标地址提取相关的数据,所以今天上午在Internet上查看有关定时任务(调度任务)的相关信息,筛选半天然后查找到Quartz.net. Quart ...

  7. Quartz.NET---任务调度框架

    在我们的程序中,可能经常会遇到"每隔多久执行XXX任务"这样的问题:每天晚上24:00审核用户提交的申请:每隔1分钟去数据库中检索用户是否有新的消息:...   ...那么Quar ...

  8. Quartz 开源的作业调度框架

    Quartz 是一个开源的作业调度框架,它完全由 Java 写成,并设计用于 J2SE 和 J2EE 应用中.它提供了巨大的灵活性而不牺牲简单性.你能够用它来为执行一个作业而创建简单的或复杂的调度.本 ...

  9. 分布式开源调度框架TBSchedule原理与应用

    主要内容: 第一部分 TBSchedule基本概念及原理 1. 概念介绍 2. 工作原理 3. 源代码分析 4. 与其它开源调度框架对照 第二部分 TBSchedule分布式调度演示样例 1. TBS ...

随机推荐

  1. 初学java之12 泛型编程的个人理解总结

    首先,强调一个观点: 对于我这样的初学者,一定要站在虚拟机和编译器的角度来分析java 语言的种种特性,泛型也不例外.(我认为这个一条正确的学习经验) 写这篇文章起源于最近在学java,有一天在路上和 ...

  2. Hadoop-1.2.1 升级到Hadoop-2.6.0 HA

      Hadoop-1.2.1到Hadoop-2.6.0升级指南   作者 陈雪冰 修改日期 2015-04-24 版本 1.0     本文以hadoop-1.2.1升级到hadoop-2.6.0 Z ...

  3. ASP.NET Web API 2.1支持Binary JSON(Bson)

    ASP.NET Web API 2.1内建支持XML.Json.Bson.form-urlencoded的MiME type,今天重点介绍下Bson.BSON是由10gen开发的一个数据格式,目前主要 ...

  4. Hadoop学习笔记—9.Partitioner与自定义Partitioner

    一.初步探索Partitioner 1.1 再次回顾Map阶段五大步骤 在第四篇博文<初识MapReduce>中,我们认识了MapReduce的八大步凑,其中在Map阶段总共五个步骤,如下 ...

  5. 自动化安装SQL Server+SP就那么简单

    随着业务.企业规模的日益壮大,DB的数量也在不断增多,配置一台新增DB,从服务器的参数配置,磁盘阵列规划,DB安装部署,DB参数调优等等一列步骤下来,手工操作的效率变得越来越低,因为我负责的数据库近些 ...

  6. [CentOs7]搭建ftp服务器(3)——上传,下载,删除,重命名,新建文件夹

    摘要 上篇文章介绍了如何为ftp添加虚拟用户,本篇将继续实践如何上传,下载文件. 上传 使用xftp客户端上传文件,如图所示 此时上传状态报错,查看详情 从错误看出是应为无法创建文件造成的.那么我们就 ...

  7. 数据库中GETDATE()函数格式化时间

    SELECT CONVERT(varchar(100), GETDATE(), 0): 05 16 2016 10:57AM SELECT CONVERT(varchar(100), GETDATE( ...

  8. 创建分区表和查看分区表的Metadata

    未分区的表,只能存储在一个FileGroup中:对table进行分区后,每一个分区都存储在一个FileGroup中.表分区是将逻辑上一个完整的表,按照特定的字段拆分成Partition set,分散到 ...

  9. Lookup component 用法

    Lookup component 类似于Tsql的join子句, select a.* ,b.* from dbo.tis a left join dbo. tdes b on a.code=b.co ...

  10. Sql Server系列:数据库对象

    数据库对象是数据库的组成部分,数据表.视图.索引.存储过程以及触发器等都是数据库对象. 数据库的主要对象是数据表,数据表是一系列二维数组的集合,用于存储各种信息. 视图表面上看与表几乎一样,具有一组命 ...