7.3 ABP后台服务 - 集成Quartz

7.3.1 简介

Quartz是一个功能齐全,且开源的作业调度系统,小型应用到大型企业级系统都可以使用它。Abp.Quartz简单的集成它到ABP。

ABP有个内置的持久化后台作业队列和后台作业工人。Quartz是个好的选择,如果你对后台作业工人有很高的调度需要的话。当然,对于持久化后台作业队列,Hangfire是个不错的选择。

7.3.2 安装

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

  1. [DependsOn(typeof (AbpQuartzModule))]
  2. public class YourModule : AbpModule
  3. {
  4. //...
  5. }

7.3.3 创建后台作业

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

  1. public class MyLogJob : JobBase, ITransientDependency
  2. {
  3. public override void Execute(IJobExecutionContext context)
  4. {
  5. Logger.Info("Executed MyLogJob :)");
  6. }
  7. }

我们简单的实现了 Execute 方法来写日志。如果要了解更多请参考Quartz文档

7.3.3 创建调度作业

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

  1. public class HomeController : AbpController
  2. {
  3. private readonly IQuartzScheduleJobManager _jobManager;
  4. public HomeController(IQuartzScheduleJobManager jobManager)
  5. {
  6. _jobManager = jobManager;
  7. }
  8. public async Task<ActionResult> ScheduleJob()
  9. {
  10. await _jobManager.ScheduleAsync<MyLogJob>(
  11. job =>
  12. {
  13. job.WithIdentity("MyLogJobIdentity", "MyGroup")
  14. .WithDescription("A job to simply write logs.");
  15. },
  16. trigger =>
  17. {
  18. trigger.StartNow()
  19. .WithSimpleSchedule(schedule =>
  20. {
  21. schedule.RepeatForever()
  22. .WithIntervalInSeconds(5)
  23. .Build();
  24. });
  25. });
  26. return Content("OK, scheduled!");
  27. }
  28. }

7.3.4 更多

请查看Quartz文档来了解Quartz的更多信息。