Quartz集成
Quartz是一個全功能的、開源的job計划安排系統,可以用在小的apps也可以用於大型的企業系統。Abp.Quartz包簡化了ABP集成Quartz。
ABP有內建的持久化后台job隊列和后台worker系統。如果對於后台workers你有更高級的計划安排需求,Quartz會是一個更好的選擇。對於持久化后台job隊列,Hangfire也是一個好的選擇。
在工程中安裝Abp.Quartz nuget包並在模塊上為AbpQuartzModule添加一個DependsOn特性:
[DependsOn(typeof (AbpQuartzModule))] public class YourModule : AbpModule { //... }
要創建一個新job,你可以實現Quartz的IJob接口,或者繼承JobBase類(定義在Abp.Quartz包),這個類包含一些幫助屬性和方法(例如日志和本地化)。一個簡單的job類如下所示:
public class MyLogJob : JobBase, ITransientDependency { public override void Execute(IJobExecutionContext context) { Logger.Info("Executed MyLogJob :)"); } }
我們簡化了實現Execute方法來寫日志。你可以參見Quartz文檔了解更多。
IQuartzScheduleJobManager用來計划安排工作。你可以注入到你的類(或可以在模塊的PostInitialize方法中使用它)來規划jobs。規划一個job的示例控制器:
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!"); } }
請參見Quart的文檔了解更多關於Quartz的信息。