.net利用quartz任务调度,开发Job管理系统一
一、背景
一个庞大的系统,往往会被拆分成很多独立的子系统。每个系统都有着其独特的业务逻辑。如果说一个系统就是一个人,那么各个子系统就是人的器官,而数据就是血与肉将,通过数据的交互将各个独立系统贯穿成一个完整的系统。但是各个系统的数据通讯,并不能像我们想象中的那么通畅,特别是在数据量特别大的时候,或者说当其中有个系统故障了,导致无法正常传输数据。或者说我们想在业务主流程之外,想做一些定时的辅助功能,比如定时的数据查询;定时的触发一些事件。执行这些定时辅助功能需要开销一定的系统资源,我们不能把这些功能放在主流程上执行,因为会消耗大量的系统性能。所以就需要创建一些独立于主流程的后台任务,利用这些任务来执行辅助功能,当然也就需要一个统筹管理的一个系统——Job管理系统。
二、系统概述
建立一个后台管理系统,用于管理Job方法所在的命名空间、类名,方法名;JOB定时触发条件;查看当前JOB的活动状态;下一次的执行时间等。当开发创建写了一个辅助功能,比如数据查询,由核心类将这个方法添加到一个发布者的委托队列中。由quartz调用委托队列,向订阅者发布消息。那么我们只需要往后台添加一条记录,记录包括job(发布者)的命名空间、类名、方法名,以及相关的调用规则(比如一分钟调用一次)。以便quartz能够按照指定的规则动态调用委托来触发事件。
三、详细设计(待更新)
3.1 数据库字段设计
字段名称 | 字段类型 | 备注 |
JobID | int | 主键 |
JobName | varchar(100) | job命名空间+类名;例如(JobService.Job) |
JobMethod | varchar(100) | job方法名 |
JobNickName | varchar(100) | job中文名称 |
JobRegula | varchar(100) | job触发规则 |
JobFlag | tinyint | job状态 |
JobCreator | nvarchar(100) | 创建者 |
JobCreateTime | datetime | 创建时间 |
JobRowStatus | tinyint | 行状态 |
JobGroup | varchar(100) | job所在组默认为default组 |
3.2代码设计
/// <summary>
/// 任务托管方法
/// </summary>
public delegate void ExecteDelegate();
/// <summary>
/// 任务类,实现IJob接口
/// </summary>
class JobCore : IJob
{
private static readonly List<ExecteDelegate> objDelegateList = new List<ExecteDelegate>();
private static readonly Hashtable objJobHashTable = new Hashtable();
public JobCore()
{
}
public JobCore(ExecteDelegate jobDelegat