美文网首页
quantz.net基于数据库的任务调度管理(Only.Jobs

quantz.net基于数据库的任务调度管理(Only.Jobs

作者: 有态度的晓道 | 来源:发表于2017-07-09 19:24 被阅读0次

一 前言:

各大调度组件优缺点在这就不讨论了,使用quantz.net是因为它可以执行秒级任务。

Only.Jobs 项目通过将各Job存储在数据库中,启动一个专门的Job管理任务来循环调度各Job的的调度情况。

项目分为 Web管理系统  、服务运行端   、数据提供逻辑处理层

数据访问使用了 SqlSugar 4.1.1.5版本,目前支持MySql、SqlServer

采用quantz.net+Topshelf  可安装为windows服务。

二 项目结构:

一一介绍下:

Only.Jobs.Items 下是创建的测试Job项目。

Only.Jobs  是一个调度服务项目,集成了Topshelf,可安装成windows服务。

Only.Jobs.Core  是项目的核心层,对外提供数据操作。

Only.Jobs.Web 为调度任务的管理和状态监控管理系统。

先来看下总体效果吧

运行Only.Jobs.Web项目:

在任务管理模块可停止、启用各Job.

三 表结构介绍

BackgroundJob  为任务信息存储表

BackgroundJobLog 为任务执行跟踪日志表

四 实现介绍

通过任务管理模块将开发好的Job所在的项目配置起来,存储到BackgroundJob表中。

在Only.Jobs项目中创建ManagerJob 类,Job调度任务管理。


[DisallowConcurrentExecution]

public class ManagerJob : IJob

{

private readonly ILog _logger = LogManager.GetLogger(typeof(ManagerJob));

public void Execute(IJobExecutionContext context)

{

Version Ver = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;

_logger.InfoFormat("ManagerJob Execute begin Ver." + Ver.ToString());

try

{

new QuartzManager().JobScheduler(context.Scheduler);

_logger.InfoFormat("ManagerJob Executing ...");

}

catch (Exception ex)

{

JobExecutionException e2 = new JobExecutionException(ex);

e2.RefireImmediately = true;

}

finally

{

_logger.InfoFormat("ManagerJob Execute end ");

}

}

}

JobScheduler 方法:

//Job状态管控

/public void JobScheduler(IScheduler Scheduler)        

{            

List  list = new BackgroundJobService().GeAllowScheduleJobInfoList();

if (list != null && list.Count > 0)

{

foreach (BackgroundJobInfo jobInfo in list)

{

JobKey jobKey = new JobKey(jobInfo.BackgroundJobId.ToString(), jobInfo.BackgroundJobId.ToString() + "Group");

if (Scheduler.CheckExists(jobKey) == false)

{

if (jobInfo.State == 1 || jobInfo.State == 3)

{

ScheduleJob(Scheduler, jobInfo);

if (Scheduler.CheckExists(jobKey) == false)

{

new BackgroundJobService().UpdateBackgroundJobState(jobInfo.BackgroundJobId, 0);

}

else

{

new BackgroundJobService().UpdateBackgroundJobState(jobInfo.BackgroundJobId, 1);

}

}

else if (jobInfo.State == 5)

{

new BackgroundJobService().UpdateBackgroundJobState(jobInfo.BackgroundJobId, 0);

}

}

else

{

if (jobInfo.State == 5)

{

Scheduler.DeleteJob(jobKey);

new BackgroundJobService().UpdateBackgroundJobState(jobInfo.BackgroundJobId, 0);

}

else if (jobInfo.State == 3)

{

new BackgroundJobService().UpdateBackgroundJobState(jobInfo.BackgroundJobId, 1);

}

}

}

}

}

其他的简单的就不在这描述了。

接下来看下运行效果:

启动Only.Jobs项目

仅仅是一个工具项目而已,大家可尽管仍砖头过来。

代码已上传github

https://github.com/mamingbo/Only.Jobs  欢迎下载使用。

相关文章

  • quantz.net基于数据库的任务调度管理(Only.Jobs

    一 前言: 各大调度组件优缺点在这就不讨论了,使用quantz.net是因为它可以执行秒级任务。 Only.Job...

  • 大数据相关开源项目汇总

    调度与管理服务 **Azkaban **是一款基于Java编写的任务调度系统任务调度,来自LinkedIn公司,用...

  • xxl_job的调度线程池

    5.4.3 调度中心HA(集群) 基于数据库的集群方案,数据库选用Mysql;集群分布式并发环境中进行定时任务调度...

  • elasticjob架构

    基于zookeeper、quzrtz的分布式任务调度(作业)框架实现的主要功能: 重写quartz基于数据库的分布...

  • MySQL 5.6 5.7 如何自定义行锁超时等待(wait

    1. 问题 最近由于业务的需要,写了个基于数据库锁机制的分布式调度简易框架,用于处理业务中的补偿任务和定时轮询任务...

  • 基于ThreadPoolTaskScheduler 的轻量级任务

    一、传统任务调度 基于Scheduled注解的任务调度 将cron表达式写在任务执行的方法上,具体如下:@Sche...

  • 分布式任务调度平台XXL-JOB

    为获得更好的阅读体验,请访问原文:传送门 一、分布式任务调度概述 什么是任务调度平台 任务调度是指基于给定的时间点...

  • 学习Linux2

    linux 学习2 定时任务管理 crond 任务调度 crontab 进行 定时任务的设置 概述任务调度:是指系...

  • Azkaban 使用问题及解决(一)

    什么是Azkaban Azkaban是一款基于Java编写的任务调度系统 任务调度:有四个任务脚A、B、C、D,其...

  • Mesos vs Yarn

    Apache Hadoop Yarn简介 Yarn的基本理念是将资源管理与任务调度分离到不同的守护进程中去。基于这...

网友评论

      本文标题:quantz.net基于数据库的任务调度管理(Only.Jobs

      本文链接:https://www.haomeiwen.com/subject/cikehxtx.html