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

一、简介

  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 依赖。如下所示:

[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方法中解析和使用它)来调度作业。某个包含作业调度的控制器示例:

public class HomeController : AbpController
{
    private readonly IQuartzScheduleJobManager _jobManager;

    public HomeController(IQuartzScheduleJobManager jobManager)
    {
        _jobManager = jobManager;
    }

    public async Task<ActionResult> ScheduleJob()
    {
        await _jobManager.ScheduleAsync<MyLogJob>(
            job =>
            {
                job.WithIdentity("MyLogJobIdentity", "MyGroup")//  .WithIdentity("作业名称""作业组")
                    .WithDescription("A job to simply write logs.");
            },
            trigger =>
            {
                trigger.StartNow()
                    .WithSimpleSchedule(schedule =>
                    {
                        schedule.RepeatForever()
                            .WithIntervalInSeconds(5)
                            .Build();
                    });
            });

        return Content("OK, scheduled!");
    }
}abp将创建过程进行了轻度的封装,翻译过来源代码大概如下:
 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>(
                .....
              );

        }   

 

 

参考:

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

 

时间: 2024-10-03 11:54:13

ABP后台服务之作业调度Quartz.NET的相关文章

Windows 7开发:后台服务(动手实验)

Windows 7 和 Windows Vista 在后台处理方面经过了很多改进.如今实现有效后台处理 的挑战包括: • 性能--启动延迟,登录延迟,关闭延迟:后台 处理干扰前台处理 • 耗电 • 安全--攻击面增多 Windows 7 后台服务和计划任务采用各种机制最大程度地减小耗电量,减少系统攻击 面,并提高应用程序和系统性能.这些机制包括: • 服务请求的安全权限 • 服务 SID • 延迟自动启动服务 • 触发器 启动服务 • 计划任务条件和设置 由于如今的 Windows 中存在大量服

Android中Service(后台服务)详解

  这篇文章主要介绍了Android中Service(后台服务)详解,本文讲解了Service的概念.作用.生命周期.启动方式和代码实例等内容,需要的朋友可以参考下 1.概念: (1).Service可以说是一个在后台运行的Activity.它不是一个单独的进程,它只需要应用告诉它要在后台做什么就可以了. (2).它要是实现和用户的交互的话需要通过通知栏或者是通过发送广播,UI去接收显示. (3).它的应用十分广泛,尤其是在框架层,应用更多的是对系统服务的调用. 2.作用: (1).它用于处理一

服务器安全狗守护中心无法启动后台服务的完美解决方法

今天在帮客户配置服务器的时候,重启系统以后运行安全狗以后提示服务器安全狗守护中心无法启动后台服务,到服务里面启动发现SafeDogGuardCenter.exe文件丢失了,经过如下方法解决了,特分享下 1.SafeDogGuardCenter.exe文件丢失,经过排查时因为服务器安装了mcafee导致,SafeDogGuardCenter.exe在mcafee8.1未升级病毒库之前是病毒文件,经过升级以后与设置例外可以防止文件再被误删. 2.在mcafee中设置扫描例外,否则还会被删除 点击 所

怎样快速批量设置Win8后台服务

对系统进行优化不仅可以提高系统的性能,还能提高系统的运行速度,对系统后台服务进行关闭或启动等设置也是系统优化的一种,但刚接触Win8系统的用户对这方面的操作并不是很熟悉,下面让小编来详细的介绍下. Win8后台服务批量设置的技巧: 在优化操作前,启动服务管理器(Services.msc),单击"操作→导出列表",将当前服务状态导出为Services.csv文件.使用Excel打开导出的Services.csv文件,系统服务运行状态就一目了然了. 系统服务的批量设置,借助SC命令制作一个

优化大师后台服务优化

服务是一种应用程序类型,它在后台运行,与 UNIX 后台应用程序类似.并且,每个服务都有特定的权限. 根据服务的启动类型,可以分为"自动"."手动"和"禁用"三种. (1)."自动"即启动系统时或首次调用服务时将自动启动这些服务. (2)."手动"则在系统能够加载该服务前必须手工启动该服务,并使其可用. (3)."禁用",则无法自动或通过手工启动该服务. Windows2000/XP/2

Windows优化大师后台服务优化方法

  当我们在使用电脑时,并不只是我们看到的程序在运行而已,后台也在运行.服务是一种应用程序类型,它在后台运行,与 UNIX 后台应用程序类似.并且,每个服务都有特定的权限.为方便用户优化后台服务,Windows优化大师提供了设置向导模块,通过此向导,用户可以方便地优化或恢复服务.下面,就让小编来为大家分享Windows优化大师后台服务优化方法. 注:具体停用或禁用那些服务,使用者应该根据自己的实际情况并结合Windows优化大师对于该服务的描述信息来决定. 设置向导: 点击"设置向导"

VS2010里面调试后台服务

最近刚学习了后台服务,对于后台服务的调试我们需要通过附加到进程的方式才可以调试,并且首先需要安装并启动我们写的服务,步骤如下: 1.使用InstallUtil.exe 安装服务,注意InstallUtil.exe的版本 如果你的服务是在Framework 4.0的环境下生成的请使用 C:\Windows\Microsoft.NET\Framework\v4.0.30319目录的InstallUtil.exe,同理如果使用不同的Framework版本, 请使用相应的Framework版本文件夹下的

Android系统中 ActivityManager 是如何绑定系统的后台服务的?

问题描述 Android系统中 ActivityManager 是如何绑定系统的后台服务的? Android系统中 ActivityManager 是如何绑定系统的后台服务的? 解决方案 建议你去看下Android源代码.还有老罗那本书对这个有介绍! 解决方案二: binder,用aidl写的那个

SDK2.2.1在应用推出时想stop 环信后台服务时会发生ANR.

问题描述 在试图stop环信后台服务时,抱错:08-10 22:29:24.261: W/ContextImpl(23097): Implicit intents with startService are not safe: Intent { act=com.EmChatService } android.content.ContextWrapper.stopService:538 com.nut.teamradar.TeamRadarApplication.onTerminate:68 co