Quartz 后台工作者管理
建议使用ABP CLI安装包.
在项目的文件夹(.csproj文件)中打开命令行窗口输入以下命令:
如果你想手动安装;
添加 NuGet包添加到你的项目:
配置
参阅.
后台工作者是一个继承自 QuartzBackgroundWorkerBase
基类的类. 一个简单的工作者如下所示:
{
public MyLogWorker()
{
JobDetail = JobBuilder.Create<MyLogWorker>().WithIdentity(nameof(MyLogWorker)).Build();
Trigger = TriggerBuilder.Create().WithIdentity(nameof(MyLogWorker)).StartNow().Build();
}
public override Task Execute(IJobExecutionContext context)
{
Logger.LogInformation("Executed MyLogWorker..!");
return Task.CompletedTask;
}
示例中我们重写了 Execute
方法写入日志. 后台工作者默认是单例. 如果你需要,也可以实现依赖接口将其注册为其他的生命周期.
添加到BackgroundWorkerManager
默认后台工作者会在应用程序启动时自动添加到 BackgroundWorkerManager
,如果你想要手动添加,可以将 AutoRegister
属性值设置为 false
:
尽管你可以使用 AutoRegister
跳过自动添加,但如果你想要全局禁用这样会比较繁琐. 你可以通过 AbpBackgroundWorkerQuartzOptions
选项全局禁用:
[DependsOn(
typeof(AbpBackgroundWorkersQuartzModule) //Add the new module dependency
)]
public class YourModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpBackgroundWorkerQuartzOptions>(options =>
{
options.IsAutoRegisterEnabled = false;
});
}
例如你有一个每10分钟执行一次的工作者,但由于服务器不可用30分钟导致工作者错过了3次执行,你想要在服务器恢复正常后执行所有错过的执行. 你应该这样定义你的工作者:
在示例中我们定义了工作者执行间隔为10分钟,并且设置 WithMisfireHandlingInstructionIgnoreMisfires
,另外自定义 仅当工作者不存在时向quartz添加调度作业.