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. jenkins配置源码管理git

    一.首先安装上来jenkins 二.下载安装jenkins的git插件:Git plugin 三.新建一个jenkins项目,选择构建一个自由风格的软件项目: 源码管理选择git,Repository ...

  2. ASP.NET Identity 2新增双重认证、帐号锁定、防伪印章功能并修复了一些bug

    Microsoft最近发布了ASP.NET Identity 2,该版本支持双重认证.帐号锁定以及防伪印章功能,还增强了用户帐号和索引.此外新版本还包含一个改进的密码验证器并修复了一些bug. 借助于 ...

  3. 移动Web触控事件总结

    移动web风风火火几多年,让我这个在Pc端漂流的前端er不免心生仰慕,的确入行几多年,也该是时候进军移动web了.移动web中踩到的第一个坑就是事件问题,所以在吸取众大神的经验后,特作总结以示后来者. ...

  4. 剑指Offer面试题:35.将字符串转换为数字

    一.题目:将字符串转换为数字 题目:写一个函数StrToInt,实现把字符串转换成整数这个功能.当然,不能使用atoi或者其他类似的库函数. 二.代码实现 (1)考虑输入的字符串是否是NULL.空字符 ...

  5. Android编译过程中的碎碎念

    刷机不是用rom包吗?怎么可以使用fastboot flashall -w将*.img文件刷入呢? 在Mac上面可以参考这篇文章进行刷机.概括来说解释从官方下载rom包,解压后运行./flash-al ...

  6. 收集最好的Mac软件和使用方法

    MacBook 初体验 作者是刚从Windows下转到mac时写的,这篇文章对也主要介绍了Mac下开发环境的部署.软件的安装和卸载.常用快捷键.文件系统的介绍. http://liujiacai.ne ...

  7. A Beginner's Guide to Paxos

    Google Drive: A Beginner's Guide to Paxos The code ideas of Paxos protocol: 1) Optimistic concurrenc ...

  8. C# Azure 存储-Blob

    1. 前言 本文是根据Azure文档与本人做了验证之后写的. 如果想下载微软官网的demo, 请前往github https://github.com/Azure-Samples/storage-bl ...

  9. vSphere Client 编辑虚拟机属性的问题

    编辑虚拟机属性的时候, 出现: vpxclient.vmconfig.cpuid 初始值设置异常之类的,重置了, 并将注册表中的所有vmvare 相关键值删除了, 还是一样的.. 后面参照https: ...

  10. 我所理解的Cocos2d-x

    我所理解的Cocos2d-x(完全基于Cocos2d-x3.0,深度剖析计算机图形学,OpenGL ES及游戏引擎架构,全面提升游戏开发相关知识) 秦春林 著   ISBN 978-7-121-246 ...