基于Quqrtz.NET 做的任务调度管理工具
基于Quqrtz.NET 做的任务调度管理工具
国庆前,需求让我看了一下任务调度的数据表设计。和之前一样,有100多个字段,p1 ~ p100, 我说这是干嘛啊!按这写,写死去了!
然后在网上搜了一下开源的任务调度,第一个中意的就是 Quartz.NET,10.1 出来和老领导聚会,老领导说了另外一个东西:Zookeeper, 刚搜了一下,也有.NET的版本。
先入为主,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还是挺简单的,还有许多细小功能没有添加上。
另外还有一个分布式的,还没有看相关资料,没有处理。
如果觉得对你有用,请点个赞(赞。。。赞。。。赞个屁)!
------------------------------
QNMB!GSQ
基于Quqrtz.NET 做的任务调度管理工具的更多相关文章
- Quartz.NET 的任务调度管理工具
[更新] 基于Quartz.NET 的任务调度管理工具 更新列表: 任务参数可视化. 立即中断正在执行的任务. 每个任务独立的应用程序域 上一版参见: 基于Quqrtz.NET 做的任务调度管理工 ...
- GIT+云盘作 做 文档管理工具
GIT+云盘作 做 文档管理工具 在工作中, 会遇到公司的文档 和 自己家里的 文档进行同步的问题, 通常我们使用U盘作为传输节制, 但是不是非常好,文档的改动都不能发现, 导致回家同步的时候, 出各 ...
- Asp.Net Core 轻松学-基于微服务的后台任务调度管理器
前言 在 Asp.Net Core 中,我们常常使用 System.Threading.Timer 这个定时器去做一些需要长期在后台运行的任务,但是这个定时器在某些场合却不太灵光,而且常常无法 ...
- Go 包依赖管理工具 —— govendor
govendor 是一个基于 vendor 机制实现的 Go 包依赖管理命令行工具.与原生 vendor 无侵入性融合,也支持从其他依赖管理工具迁移,可以很方便的实现同一个包在不同项目中不同版本.以及 ...
- TODO管理工具TaskWarrior (跨平台C++代码)
Taskwarrior 是一个基于命令行的 TODO 列表管理工具.主要功能包括:标签.彩色表格输出.报表和图形.大量的命令.底层API.多用户文件锁等功能. http://www.oschina.n ...
- 基于KVM、Xen、OpenVZ等虚拟化技术的WEB在线管理工具
1.Proxmox proxmox是一个开源的虚拟化管理平台,支持集群管理和HA.在存储方面,proxmox除了支持常用的lvm,nfs,iscsi,还支持集群存储glusterfs和ceph,这也是 ...
- 基于Tcp穿越的Windows远程桌面(远程桌面管理工具)
基于Tcp穿越的Windows远程桌面(远程桌面管理工具) 1.<C# WinForm 跨线程访问控件(实用简洁写法)> 2.<基于.NET环境,C#语言 实现 ...
- 基于 K8s 做应用发布的工具那么多, 阿里为啥选择灰姑娘般的 Tekton ?
作者 | 邓洪超,阿里云容器平台工程师, Kubernetes Operator 第二人,云原生应用标准交付与管理领域知名技术专家 导读:近年来,越来越多专门给 Kubernetes 做应用发布的 ...
- 如何基于WPF写一款数据库文档管理工具(二)
系列目录 基于WPF重复造轮子,写一款数据库文档管理工具(一) 本篇重点 上次发表了基于WPF重复造轮子,写一款数据库文档管理工具(一) 得到不少人支持,文章一度上到了博客园推荐表首页,看来大家对这个 ...
随机推荐
- 关于cocos2dx导入安卓项目至eclipse的诸多问题
看视频实在是有点蛋疼,尽管我也想在苹果上做,可是奈何自己是一个小屌丝,根本买不起高富帅的装备.所以仅仅能硬着头皮去处理win以下的问题. 在把用C++语言编写的cocos2dx项目编译编译完毕之后,导 ...
- crm使用soap插入下拉框选项
//C# 代码: //InsertOptionValueRequest request = new InsertOptionValueRequest(); //request.OptionSetNam ...
- Elasticsearch教程
Elasticsearch教程 摘要: 参考资料Elasticsearch中文参考文档思维导图阅读全文 posted @ 2015-08-05 11:49 xingoo 阅读(18) | 评论 (0) ...
- interview(转)
http://ifeve.com/ali-think-12/ http://ifeve.com/think-in-ali-10/
- eclipse 构造 C++ 11 -- ubuntu 12.04
设备g++ 4.8 sudo apt-get install python-software-properties sudo add-apt-repository ppa:ubuntu-toolcha ...
- .net Framework各个版本之间的发展
原文:.net Framework各个版本之间的发展 上个星期看到了.NET 4.0框架退休日期逐渐临近文章,发现自己一直在使用NET FrameWork,身为一个NET程序员,里面大概的区别自己还 ...
- .NET中lock的使用方法及注意事项
lock就是把一段代码定义为临界区,所谓临界区就是同一时刻只能有一个线程来操作临界区的代码,当一个线程位于代码的临界区时,另一个线程不能进入临界区,如果试图进入临界区,则只能一直等待(即被阻止),直到 ...
- js获取网页的各种高度
原文:js获取网页的各种高度 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网页可见区域宽: documen ...
- crawler_分布式网络爬虫的设计与实现_设计图
一.集中调度式 二.p2p 三.混合调度式 四.大型集群
- Net开源网络爬虫
转载.Net开源网络爬虫Abot介绍 .Net中也有很多很多开源的爬虫工具,abot就是其中之一.Abot是一个开源的.net爬虫,速度快,易于使用和扩展.项目的地址是https://code.goo ...