基于进程的Quartz.NET管理系统QuartzService

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于进程的Quartz.NET管理系统QuartzService相关的知识,希望对你有一定的参考价值。

需求

在处理定时任务大家可能都用过Quartz.NET,但在生产环境中大家肯定也遇到过如下的问题:

  1. 发布的时候需要停掉所有的Job,再整个一起打包发布
  2. 没有管理界面(其实在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 基于数据库的简单实现

Quartz.Net

第十三节: 总结Quartz.Net几种部署模式(IISExe服务部署借助TopSelf服务类)

如何使用 Quartz.Net 开始计划作业?

net core quartz调度 warp打包 nssm部署到windowsservice

Quartz.NET总结Quartz 远程调度