基于进程的Quartz.NET管理系统QuartzService
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于进程的Quartz.NET管理系统QuartzService相关的知识,希望对你有一定的参考价值。
需求
在处理定时任务大家可能都用过Quartz.NET,但在生产环境中大家肯定也遇到过如下的问题:
- 发布的时候需要停掉所有的Job,再整个一起打包发布
- 没有管理界面(其实在github也有几个这方面的项目,如:CrystalQuartz),不能很好的做到实时监控。
由于在生产环境中有以上的问题,所以我抽空就写了一个基于Quartz.NET的QuartzService。
?
原理
因为Quartz.NET中,任务的管理是其于线程的,所以在管理Job的时候并不能将Job隔离开来,所以才有了问题一。在QuartzService中我采用的是进程的方式进行管理。即一个执行程序包含一个Scheduler与一个Job,这样就对任务进行了隔离,但这也意味着更大的资源消耗。对此我的应对策略是一Scheduler可以包含多少Job但具体的实现可能需要读者自行参考两个项目。在后续的文章中我会介绍如何进行部署。
?
对于管理界面,则是采用的RemoteScheduler进行控制。因为QuartzService采用的是进程的方式运行任务,所以在管理上还加了对任务进程的管理。
?
对于任务的解耦
在QuartzService中并没有对于任务的调用,采用了反射的方式。这个主要出于两个方面的考虑:1.对于管理中可能出现的多版本的.NET Framework(我现在的项目中就有这个问题);2.将任务做成可配置,这样方便部署。但是以上两种考虑就造成了不能对Scheduler进行监听,对于这个这个问题读者可以自己再重写一个Scheduler管理程序。这个后续会做介绍。
?
Quartz.NET: http://www.quartz-scheduler.net/
QuartzService: https://github.com/BarlowDu/QuartzService
以上是关于基于进程的Quartz.NET管理系统QuartzService的主要内容,如果未能解决你的问题,请参考以下文章
第十三节: 总结Quartz.Net几种部署模式(IISExe服务部署借助TopSelf服务类)