亚洲必赢76net的主页自建定时任务,作业调度框架

亚洲必赢76net的主页 2

在大家平日项目中平时会遇见依期职分,举例按时同步数据,依期备份数据,按期总括数据等,定期职分大家都晓得使用Quartz.net,此类别写的也是Quartz,然而以前,我们先用其余办法做个大约的按期职责张开入门。

注:目前网络海人民广播广播台湾大学介绍Quartz.net的稿子,以至Quartz.net官英特网的Tutorial都以1.0版本的,而那个连串在2.0本子对品种进展了比非常的大局面包车型客车校勘,使得原有的无数例证都不能够运作,故写此文。由于我是边学边用,加之手艺写作水平都有限,错误自然在劫难逃,望轻拍,笔者将不定时更新完备此贴,希望能为须求的敌人提供支援。

首先呢,大家前几日友好先写叁个简单易行的准时循环职责,话超级少说,直接上代码:

1. 品种介绍

首先步:成立项目,新建七个类库:大家命名称为TaskBase

    
于今的系统,业务数据是更上一层楼大,古板的一路管理方式有时候已经不能够满足顾客须要,准期后台服务这种异步数据处理格局则日益被大家选取。相信大家在平时的职业中也时常蒙受数据同步,或是依期邮件,短信提醒等供给,Quartz.net(官方网站
)能够很好满意对多个windows服务的管理及监督,同一时候在确定保障支付轻易的场地下不失灵活,是老泰安想的学业调解框架。

其次部:增添二个空洞基础类BaseMonitor:

和别的超过四分之一开源项不熟识龙活虎律Quartz.net也含有了任何多少个雅观的开源项目:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TaskBase
{
    /// <summary>
    /// 监测基础抽象类
    /// </summary>
    public abstract class BaseMonitor
    {

        protected System.Threading.Thread _thread;
        /// <summary>
        /// 监控时间间隔(毫秒)
        /// </summary>
        public virtual int Interval { get; set; }

        public virtual string Name { get; set; }
        /// <summary>
        /// 监控器状态
        /// </summary>
        public virtual TaskState State { get; set; }
        public BaseMonitor(string name)
        {
            Name = name;
            _thread = new System.Threading.Thread(BaseRun);
            _thread.IsBackground = true;//获取或设置一个值,该值指示某个线程是否为后台线程
            _thread.Start();
            State = TaskState.运行;
        }
        private void BaseRun()
        {          
            while (State==TaskState.运行)
            {
                try
                {
                    Run();
                    System.Threading.Thread.Sleep(Interval);
                }
                catch (Exception ex)
                {
                    State = TaskState.异常;
                    PCore.Log.LogTextHelper.WriteErrorLog(this.GetType().Name + "监控出现错误,此监视器已暂停!", ex);
                }
            }
        }
        protected virtual void Run()
        { }
    }
}

大旨   —-Common.Logging(通用日志接口)

(代码中PCore.Log.LogTextHelper.WriteErrorLog
是二个写文本日志的措施,可自行写个此方法。)

         —-C5(泛型集结类)

 注:此定时职务基础类 是用 System.Threading.Thread
完成,当中 TaskState为一个枚举来表示义务的景况:

演示程序

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TaskBase
{
   public enum TaskState
    {
        未开始=0,
        运行=1,
        暂停=2,
        异常=3
    }
}

         —-log4net(日志记录-通用日志接口达成)

其三部:增多二个接续BaseMonitor的TestMontior类,代码如下:

         —-topshelf(跨平台服务宿主程序)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TaskBase
{
   public class TestMontior:BaseMonitor
    {
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="name">检测器名称</param>
        public TestMontior(string name) : base(name)
        {
        }
        /// <summary>
        /// 监控时间间隔(毫秒)
        /// </summary>
        public override int Interval
        {
            get
            {
              return  GlobalConfig.TestMonitorInterval;
            }          
        }
        public override string Name
        {
            get
            {
                return base.Name;
            }

            set
            {
                base.Name = value;
            }
        }

        public override TaskState State
        {
            get
            {
                return base.State;
            }

            set
            {
                base.State = value;
            }
        }
        protected override void Run()
        {          
            PCore.Log.LogTextHelper.WriteLog("TestMontitor监测器正在监测");
        }
    }
}

  Quartz.net使用的许但是Apache
License,商业友好,使用者能够修正源码用于开源或购销项目,只需包括许可及修改表明。

注:TestMontior
约等于大家的Job,代码中 GlobalConfig是自个儿定义的二个大局参数类:

2. Quartz.net开采思路

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TaskBase
{
   public static class GlobalConfig
    {
        public static int TestMonitorInterval
        {
            get { return 100 * 10; }
        }

        public static List<BaseMonitor> Monitor = new List<BaseMonitor>();
    }
}

 

创办完毕之后便是以此样子:

  大家来打听下Quartz.net中常用的多少个概念:

亚洲必赢76net的主页 1

  Scheduler  ———主调解程序 ——— Quartz主题

按期职务的基本功类库已经创办达成,上边大家来看怎么使用它。

  Job        ———作业  ——— 服务要做的(业务操作)

 第四部:在WEB中动用:创设二个WEB 
MVC项目,援引TaskBase,然后在Global.asax中加多以下代码:

  Trigger     ———触发器  ——— 服务实践标准(曾几何时实践操作)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;

namespace WebTaskTest
{
    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);


           TaskBase.GlobalConfig.Monitor.Add(new TaskBase.TestMontior("测试监控器Test"));//注册定时任务


        }
    }
}

  Listener    ———事件监听器  ——— 试行期事件(Job实施前后/
Scheduler运营终止暂停时应有做怎样,能够挂一些一定事件)

运行WEB站点,查看日志如下:

  驾驭了这几个概念之后,大家就能够结合那些概念并收拾出开垦的笔触:

亚洲必赢76net的主页 2

 
先利用SchedulerFactory构建七个Scheduler,运维Scheduler,之后创设Job和Trigger,若有作业监听须求,在Listener上增加对应的管理程序,再将Job和Trigger关联后放入Scheduler

可以观察后生可畏分钟推行一遍,因为我们在GlobalConfig.TestMonitorInterval设置的就是意气风发分钟。

3. Quartz.net的简要利用

上面我们看什么在windows
server中怎么样采纳:

               1. 新建二个调节台程序,引用Quartz.dll和Common.Logging.dll

发表评论

电子邮件地址不会被公开。 必填项已用*标注