基于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


 
 
标签: Quartz.net

基于Quqrtz.NET 做的任务调度管理工具的更多相关文章

  1. Quartz.NET 的任务调度管理工具

    [更新] 基于Quartz.NET 的任务调度管理工具   更新列表: 任务参数可视化. 立即中断正在执行的任务. 每个任务独立的应用程序域 上一版参见: 基于Quqrtz.NET 做的任务调度管理工 ...

  2. GIT+云盘作 做 文档管理工具

    GIT+云盘作 做 文档管理工具 在工作中, 会遇到公司的文档 和 自己家里的 文档进行同步的问题, 通常我们使用U盘作为传输节制, 但是不是非常好,文档的改动都不能发现, 导致回家同步的时候, 出各 ...

  3. Asp.Net Core 轻松学-基于微服务的后台任务调度管理器

    前言     在 Asp.Net Core 中,我们常常使用 System.Threading.Timer 这个定时器去做一些需要长期在后台运行的任务,但是这个定时器在某些场合却不太灵光,而且常常无法 ...

  4. Go 包依赖管理工具 —— govendor

    govendor 是一个基于 vendor 机制实现的 Go 包依赖管理命令行工具.与原生 vendor 无侵入性融合,也支持从其他依赖管理工具迁移,可以很方便的实现同一个包在不同项目中不同版本.以及 ...

  5. TODO管理工具TaskWarrior (跨平台C++代码)

    Taskwarrior 是一个基于命令行的 TODO 列表管理工具.主要功能包括:标签.彩色表格输出.报表和图形.大量的命令.底层API.多用户文件锁等功能. http://www.oschina.n ...

  6. 基于KVM、Xen、OpenVZ等虚拟化技术的WEB在线管理工具

    1.Proxmox proxmox是一个开源的虚拟化管理平台,支持集群管理和HA.在存储方面,proxmox除了支持常用的lvm,nfs,iscsi,还支持集群存储glusterfs和ceph,这也是 ...

  7. 基于Tcp穿越的Windows远程桌面(远程桌面管理工具)

    基于Tcp穿越的Windows远程桌面(远程桌面管理工具) 1.<C# WinForm 跨线程访问控件(实用简洁写法)>            2.<基于.NET环境,C#语言 实现 ...

  8. 基于 K8s 做应用发布的工具那么多, 阿里为啥选择灰姑娘般的 Tekton ?

    作者 | 邓洪超,阿里云容器平台工程师, Kubernetes Operator 第二人,云原生应用标准交付与管理领域知名技术专家   导读:近年来,越来越多专门给 Kubernetes 做应用发布的 ...

  9. 如何基于WPF写一款数据库文档管理工具(二)

    系列目录 基于WPF重复造轮子,写一款数据库文档管理工具(一) 本篇重点 上次发表了基于WPF重复造轮子,写一款数据库文档管理工具(一) 得到不少人支持,文章一度上到了博客园推荐表首页,看来大家对这个 ...

随机推荐

  1. MySQL之终端(Terminal)管理MySQL

    原文:MySQL之终端(Terminal)管理MySQL 前言:MySQL有很多的可视化管理工具,比如“mysql-workbench”和“sequel-pro-”. 现在我写MySQL的终端命令操作 ...

  2. Async和Await进行异步编程

    使用Async和Await进行异步编程(C#版 适用于VS2015) 你可以使用异步编程来避免你的应用程序的性能瓶颈并且加强总体的响应.然而,用传统的技术来写异步应用是复杂的,同时编写,调试和维护都很 ...

  3. atittit.表单验证性质的原则和实施,以及选择和定义自己的兼容easyui dsl窗体身份验证规则

    atittit.表单验证性质的原则和实施,以及选择和定义自己的兼容easyui dsl规则的表单验证 1. 需求,表单验证须要弹框式,但眼下easyui ms绑定死了tooltip式样 1 2. 表单 ...

  4. CSV文件格式分析器执行:从字符串Split至FSM

    本文乃Siliphen原创,转载请注明出处:http://blog.csdn.net/stevenkylelee/article/details/38309147 本文分为5小节,基本上就是我刚接触C ...

  5. osx launchpad删除图标

    安装了个parallels desktop之后,OSX中的launchpad中的图标多了不少,但是好多都不是我自己想要的,我们该怎么删除或者改动呢,以下介绍一些方法: ①直接操作Appications ...

  6. Apriori算法Python实现

    Apriori如果数据挖掘算法的头发模式挖掘鼻祖,从60年代开始流行,该算法非常简单朴素的思维.首先挖掘长度1频繁模式,然后k=2 这些频繁模式的长度合并k频繁模式.计算它们的频繁的数目,并确保其充分 ...

  7. Js 对象添加属性

    var arr = new Array(); arr[0] = jQuery("#data1").val(); var obj = {}; obj.y='abc'; arr.pus ...

  8. 详细解释 集成Maven Spring Mybatis项目包生成Bat文件

    有时在项目必须Maven项目包生成bat文件,长官一人.本文将解释的具体使用方法maven-assembly-plugin插件实现bat文件包. 1.首先看一下项目结构 2.配置pom.xml文件,在 ...

  9. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(1)-框架搭建

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(1)-框架搭建 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) 前言:这篇博客开始我们便一步一步的来实现这 ...

  10. Delegate,Action,Func,Predicate的使用与区别

    C#4.0推出后,类似Linq,Lamda表达式等许多新的程序写法层次不穷.与之相关的Delegate,Action,Func,Predicate的使用和区别也常常让大家迷惑,此处就结合实际的应用,对 ...