Quartz.net 开源job调度框架(一)
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调度框架(一)的更多相关文章
- Quartz.net 开源job调度框架(二)----定点执行
在上一篇 Quartz.net 开源job调度框架(一) 中讲到了基本的使用以及配置job轮训数据执行 这种做法适用于对数据操作实时性要求不高的场景,在实际场景中还有一种比较常用的场景就是我们需要在 ...
- Quartz.Net任务统一调度框架
山寨版Quartz.Net任务统一调度框架 TaskScheduler 在日常工作中,大家都会经常遇到Win服务,在我工作的这些年中一直在使用Quartz.Net这个任务统一调度框架,也非常好用, ...
- 山寨版Quartz.Net任务统一调度框架
TaskScheduler 在日常工作中,大家都会经常遇到Win服务,在我工作的这些年中一直在使用Quartz.Net这个任务统一调度框架,也非常好用,配置简单,但是如果多个项目组的多个服务部署到一台 ...
- 开源调度框架Quartz最佳实践
开源调度框架Quartz最佳实践 Quartz是一个Java调度框架,当前的最新版本为2.2.1. 以Quartz 2.2.1版为例,Quartz最佳实践(用于生产系统)总结如下: 1.跳过更新检查Q ...
- Quartz.Net 调度框架配置介绍
在平时的工作中,估计大多数都做过轮询调度的任务,比如定时轮询数据库同步,定时邮件通知等等.大家通过windows计划任务,windows服务等都实现过此类任务,甚至实现过自己的配置定制化的框架.那今天 ...
- Quartz.net(调度框架) 使用Mysql作为存储
最近公司的做的项目中涉及到配置任务地址然后按照配置去目标地址提取相关的数据,所以今天上午在Internet上查看有关定时任务(调度任务)的相关信息,筛选半天然后查找到Quartz.net. Quart ...
- Quartz.NET---任务调度框架
在我们的程序中,可能经常会遇到"每隔多久执行XXX任务"这样的问题:每天晚上24:00审核用户提交的申请:每隔1分钟去数据库中检索用户是否有新的消息:... ...那么Quar ...
- Quartz 开源的作业调度框架
Quartz 是一个开源的作业调度框架,它完全由 Java 写成,并设计用于 J2SE 和 J2EE 应用中.它提供了巨大的灵活性而不牺牲简单性.你能够用它来为执行一个作业而创建简单的或复杂的调度.本 ...
- 分布式开源调度框架TBSchedule原理与应用
主要内容: 第一部分 TBSchedule基本概念及原理 1. 概念介绍 2. 工作原理 3. 源代码分析 4. 与其它开源调度框架对照 第二部分 TBSchedule分布式调度演示样例 1. TBS ...
随机推荐
- Html5 中的新语义标签
1.1 语义标签对于我们并不陌生,如<p>表示一个段落.<ul>表示一个无序列表<h1> ~ <h6>表示一系列标题等,在此基础上HTML5增加了大量更 ...
- Visual Studio 2013 Web开发
cnbeta新闻:微软正式发布Visual Studio 2013 RTM版,微软还发布了Visual Studio 2013的最终版本..NET 4.5.1以及Team Foundation Ser ...
- 多线程中的锁系统(二)-volatile、Interlocked、ReaderWriterLockSlim
上章主要讲排他锁的直接使用方式.但实际当中全部都用锁又太浪费了,或者排他锁粒度太大了,本篇主要介绍下升级锁和原子操作. 阅读目录 volatile Interlocked ReaderWriterLo ...
- Android APK是否需要预解压
今天在逛论坛的时候,发现有一个朋友问的问题.其主要目的,是想实现 玩家首次进入游戏的时候,或者新安装了版本的时候,对APK进行解压,写入SD卡.这样游戏运行过程中,将不会再从APK中读取资源. 以提高 ...
- 三周,用长轮询实现Chat并迁移到Azure测试
公司的OA从零开始进行开发,继简单的单点登陆.角色与权限.消息中间件之后,轮到在线即时通信的模块需要我独立去完成.这三周除了逛网店见爱*看动漫接兼职,基本上都花在这上面了.简单地说就是用MVC4基于长 ...
- Socket programing(make a chat software) summary 1:How to accsess LAN from WAN
First we should know some basic conceptions about network: 1.Every PC is supposed to have its own IP ...
- 数据库基础,表及SQL语句
数据库基础及T-SQL语句 字符类型: int 整型 float 小数 double 小数 varchar(20) 字符串 bit 布尔型数据 datetime 日期时间类型 text 长文本 (以下 ...
- HTTP学习二:Web应用中的HTTP
1 HTTP连接 1.1 TCP连接对性能的影响 TCP三次握手如下图: 如上图,建立一次TCP连接要经过三个步骤.HTTP是建立在TCP之上的,因此TCP连接的性能直接影响HTTP的性能. TCP影 ...
- YY一下淘宝商品模型
淘宝的电商产品种类非常丰富,必然得力于其商品模型的高度通用性和扩展性. 下面我将亲自操作淘宝商品的发布过程,结合网上其他博客对淘宝网商品库的分析,简单谈谈我的理解. 注:下面不特殊说明,各个表除主键外 ...
- 【Win10应用开发】自定义桌面壁纸
调用通用的API来设置桌面壁纸,是一件既简单又有趣的事情,结合XAML可以生成图像的特性,你甚至可以做一个应用,让用户用他所拍的照片做成一张自定义壁纸,然后作为桌面壁纸. 这个API是通用的,应用运行 ...