
7.3 ABP后台服务 – 集成Quartz
7.3.1 简介
Quartz是一个功能齐全,且开源的作业调度系统,小型应用到大型企业级系统都可以使用它。Abp.Quartz简单的集成它到ABP。
ABP有个内置的持久化后台作业队列和后台作业工人。Quartz是个好的选择,如果你对后台作业工人有很高的调度需要的话。当然,对于持久化后台作业队列,Hangfire是个不错的选择。
7.3.2 安装
安装Abp.Quartz到你的项目,并对你的模块添加 AbpQuartzModule 依赖。如下所示:
[DependsOn(typeof (AbpQuartzModule))] public class YourModule : AbpModule { //... }
7.3.3 创建后台作业
你也可以实现Quartz的IJob接口来创建一个新的作业,或者派生自JobBase类(定义在Abp.Quartz包中),该类有一些工具属性和方法(例如:日志记录和本地化)。如下所示是一个简单的作业类:
public class MyLogJob : JobBase, ITransientDependency { public override void Execute(IJobExecutionContext context) { Logger.Info("Executed MyLogJob :)"); } }
我们简单的实现了 Execute 方法来写日志。如果要了解更多请参考Quartz文档。
7.3.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") .WithDescription("A job to simply write logs."); }, trigger => { trigger.StartNow() .WithSimpleSchedule(schedule => { schedule.RepeatForever() .WithIntervalInSeconds(5) .Build(); }); }); return Content("OK, scheduled!"); } }
7.3.4 更多
请查看Quartz文档来了解Quartz的更多信息。