tnblog
首页
视频
资源
登录

ABP后台服务之作业调度Quartz.NET

6240人阅读 2022/3/28 17:35 总访问:1450954 评论:0 收藏:0 手机
分类: ABP

一、简介

  Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中。它提供了巨大的灵活性而不牺牲简单性。

  你能够用它来为执行一个作业而创建简单的或复杂的调度。

它一些很好的特性: 

1:支持集群,作业分组,作业远程管理。  

2:自定义精细的时间触发器,使用简单,作业和触发分离。 

3:数据库支持,可以寄宿Windows服务,WebSite,winform等。 

  合适场景:

    间隔时间获取数据,每周固定时间获取数据,每个月的最后一天执行等等

  官网:https://www.quartz-scheduler.net/

   开源地址:https://github.com/quartznet/quartznet

二、ABP后台服务 - 集成Quartz

此部分是abp官方示例解说,地址:https://github.com/ABPFrameWorkGroup/AbpDocument2Chinese/blob/master/Markdown/Abp/7.3ABP后台服务-集成Quartz.md

基础概念

Quartz框架的一些基础概念解释:

   Scheduler     作业调度器。

   IJob             作业接口,继承并实现Execute, 编写执行的具体作业逻辑。

  JobBuilder       根据设置,生成一个详细作业信息(JobDetail)。

  TriggerBuilder   根据规则,生产对应的Trigger

1. 安装

安装Abp.Quartz到你的项目,并对你的模块添加 AbpQuartzModule 依赖。

Install-Package Abp.Quartz -Version 1.2.1

如下所示:

[DependsOn(typeof (AbpQuartzModule))]public class YourModule : AbpModule
{    //...
}

2. 创建后台作业

你也可以实现Quartz的IJob接口来创建一个新的作业,或者派生自JobBase类(定义在Abp.Quartz包中),该类有一些工具属性和方法(例如:日志记录和本地化)。如下所示是一个简单的作业类:

public class MyLogJob : JobBase, ITransientDependency
{    public override void Execute(IJobExecutionContext context)
    {
        Logger.Info("Executed MyLogJob :)");
    }
}

3. 创建调度作业

IQuartzScheduleJobManager 接口被用来创建调度作业。你可以在类中注入该接口(或者你可以在你的模块的PostInitialize方法中解析和使用它)来调度作业。某个包含作业调度的控制器示例:

 .WithIdentity("作业名称", "作业组")
public ActionResult ScheduleJob()
        {
            //从工厂中获取一个调度器实例化
            IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
            scheduler.Start();       //开启调度器
             
            IJobDetail job1 = JobBuilder.Create<MyLogJob>()  //创建一个作业
                .WithIdentity("MyLogJobIdentity", "MyGroup")
                .WithDescription("A job to simply write logs.")
                .Build();

            ITrigger trigger1 = TriggerBuilder.Create()
                //.WithIdentity("触发器名称", "触发器组") //未指定
                .StartNow()                       
                .WithSimpleSchedule(x => x
                    .RepeatForever() 
                    .WithIntervalInSeconds(5)
                    )
                .Build();
            
            scheduler.ScheduleJob(job1, trigger1);      //把作业,触发器加入调度器。

            return Content("OK, scheduled!");
        }

三、深入应用

 1.PostInitialize解析

文档中只告诉了我们方法,但是没说怎么做,只能自己摸着石头过河。

在web项目的xxWebModule中做如下修改

public override void PostInitialize()
        {
            var workManager = IocManager.Resolve<IQuartzScheduleJobManager>();
            workManager.ScheduleAsync<MyLogJob>(
                .....
              );

        }

转载:https://www.cnblogs.com/xcsn/p/4390574.html

参考:

http://www.cnblogs.com/lzrabbit/archive/2012/04/13/2447609.html  懒惰的肥兔

http://www.cnblogs.com/tommyli/archive/2009/02/09/1386644.html  李占卫(详细)

http://www.cnblogs.com/jys509/p/4628926.html   Quartz.NET 入门(推荐)

http://www.cnblogs.com/jys509/p/4614975.html   使用Topshelf创建Windows服务

https://www.cnblogs.com/mushroom/p/4067037.html


评价
没有个性,不需要签名
排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2024TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术