基于Quqrtz.NET 做的任务调度管理工具(1)

作者:   出处:互联网   2015-06-10 17:55:38   阅读:2

国庆前,需求让看了一下任务调度的数据表设计。和之前一样,有100多个字段,p1 ~ p100, 说这是干嘛啊!按这写,写死去了!然后在网上搜了一下开源的任务调度,第一个中意的就是 Quartz.NET,10.1 出来和老领导聚会,老领导说了另外一个东西:Zookeeper, 刚搜了一下,也有.NET的版本。


AD:

先入为主,Zookeeper 就不深入了,整个10.1 在家基本除了看电影就是看 Quartz 了。


Quartz.net 提供了 Remoting 方式,Remoting 08年的时候,写过个小程序,让一台服务器通知另外一台服务器去执行一些任务,简单的应用,除了这些,在没有深入过了。


看一下结构:



Jobs 下是任务


Listener 没有写好,不显摆了。


QM.Server 是 Quartz 的调度服务


QM.Shell 是一个管理工具


试想把管理工具放到本地来,即服务在服务器上,管理工具在本地,这样就方便管理,但是除非本地能找到调度服务所用的所有的DLL,否则就会因为无法加载类型XXX而无法进行下去。


有了这个问题,那么只好管理工具和调度服务放一起了。


即然要把管理工具和服务放一起,那就不必把DLL COPY的到处都是,但是需要做一些特殊处理


下面是生成的目录结构:


XXXXXX 管理工具目录,


XXXXXX\Service 调度服务程序集存放在这里


XXXXXX\Service\Jobs 任务程序集存放在这里


要让管理和调度服务都能找得到 任务程序集,需要改一下 app.config


管理工具的 app.config


 
....

runtime
assemblyBinding xmlns= urn:schemas-microsoft-com:asm.v1
probing privatePath= Service/Jobs /
...

 

调度服务的 app.config


...

runtime
assemblyBinding xmlns= urn:schemas-microsoft-com:asm.v1
probing privatePath= Jobs /
...

这样一来,把新写好的任务程序集放到 XXXXX\Service\Jobs 下,管理工具和调度服务都可以找得到了。


QM.Server 用到的东西:


Quartz.Net 2.2.4.400


log4net 1.2.10


Common.Logging


Common.Logging.log4net 由于 log4net 选用的是 1.2.10 ,所以这个只能用 2.0 


Topshelf


列出来这些是因为用 NuGet 搜索安装的 Common.Logging.log4net ,程序一运行就退出。手动指定为 2.0 的 Common.Logging.log4net 才没有问题。


调度服务用的是 SqlCe 4.0 来存任务信息,所以需要安装 SqlCe 4.0 的驱动, 可以从这里下载:


http://www.microsoft.com/en-us/download/details.aspx?id=17876


如果想指定其它数据库,可以修改  quartz.config


quartz.jobStore.type = Quartz.Impl.AdoJobStore.JobStoreTX, Quartz 

quartz.jobStore.driverDelegateType = Quartz.Impl.AdoJobStore.StdAdoDelegate, Quartz
quartz.jobStore.dataSource = ds
quartz.dataSource.ds.connectionString = Data Source=QUARTZ.sdf;Persist Security Info=False;
quartz.dataSource.ds.provider = SqlServerCe-400

因为管理工具是基于 Quartz REMOTING 的,所以要在 quartz.coonfig 中指定以下配置:


quartz.scheduler.exporter.type = Quartz.Simpl.RemotingSchedulerExporter, Quartz

quartz.scheduler.exporter.port = 5555
quartz.scheduler.exporter.bindName = TestScheduler
quartz.scheduler.exporter.channelType = tcp
quartz.scheduler.exporter.channelName = httpQuartz

这里指定的端口号是 5555, bindName 是 TestScheduler, 这两个东西要用在管理工具上。


Listener , Listener 不能通过 Remoting 来管理,因为 Not Support. 尝试做一个通UDP来广播 Listener ,不知道哪里没有写好,就是收不到数据。没有做好,就不多废话了。


管理工具用到的东西:


Quartz


Caliburn.Micro 


看到 Caliburn 就知道这个管理工具是用 WPF 写的了!没什么讲的,上图看看:



连接界面,主机即调度服务所在的IP


端口和 Scheduler 是上面所讲的配置中的 port 和 bindName



触发器/任务列表,可以用来停止/启动/编辑/删除指定的任务。



日历编辑界面,目前只实现了 HolidayCalendar 的编辑,Holiday 是用来指定任务在哪些日期不执行的。


这个功能 Cron 表达式无法做到,其它的基本都可以由 Cron 来做,所以目前只实现了 HolidayCalendar 的编辑。



这个是日历列表界面,右边会跟据不同的日历类型显示日历详细,只是目前只实现了 HolidayCalendar, 所以右边只有这一个界面。



任务编辑界面,触发器类型编辑器目前只实现了 Simple 和 Cron 类型的。



概览。


源码下载:


http://files.cnblogs.com/xling/QuartzJobManager.7z


要运行示例,需要运行 QM.Shell\bin\Debug\Service\QM.Server.exe 然后在运行 QM.Shell.exe 。


Quartz.NET 的API还是挺简单的,还有许多细小功能没有添加上。


另外还有一个分布式的,还没有看相关资料,没有处理。



1 2 下一页 查看全文
内容导航 第 1 页:基于Quqrtz.NET 做的任务调度管理工具(上)  第 2 页:基于Quqrtz.NET 做的任务调度管理工具(下)



入侵的艺术
黑客也有优劣之分。很显然对他们的奖励之一是利用黑客手段非法入侵们公司的安全站点或个人系统。另一种奖励可能是他们的黑客行
Copyright© 2006-2015 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 渝ICP备12000264号 法律顾问:元炳律师事务所
客服软件
live chat