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的更多信息。