Quartz 后台工作者管理

    建议使用安装包.

    在项目的文件夹(.csproj文件)中打开命令行窗口输入以下命令:

    如果你想手动安装;

    1. 添加 Volo.Abp.BackgroundWorkers.Quartz NuGet包添加到你的项目:

    配置

    参阅.

    后台工作者是一个继承自 QuartzBackgroundWorkerBase 基类的类. 一个简单的工作者如下所示:

    1. {
    2. public MyLogWorker()
    3. {
    4. JobDetail = JobBuilder.Create<MyLogWorker>().WithIdentity(nameof(MyLogWorker)).Build();
    5. Trigger = TriggerBuilder.Create().WithIdentity(nameof(MyLogWorker)).StartNow().Build();
    6. }
    7. public override Task Execute(IJobExecutionContext context)
    8. {
    9. Logger.LogInformation("Executed MyLogWorker..!");
    10. return Task.CompletedTask;
    11. }

    示例中我们重写了 Execute 方法写入日志. 后台工作者默认是单例. 如果你需要,也可以实现依赖接口将其注册为其他的生命周期.

    添加到BackgroundWorkerManager

    默认后台工作者会在应用程序启动时自动添加到 BackgroundWorkerManager,如果你想要手动添加,可以将 AutoRegister 属性值设置为 false:

    尽管你可以使用 AutoRegister 跳过自动添加,但如果你想要全局禁用这样会比较繁琐. 你可以通过 AbpBackgroundWorkerQuartzOptions 选项全局禁用:

    1. [DependsOn(
    2. typeof(AbpBackgroundWorkersQuartzModule) //Add the new module dependency
    3. )]
    4. public class YourModule : AbpModule
    5. {
    6. public override void ConfigureServices(ServiceConfigurationContext context)
    7. {
    8. Configure<AbpBackgroundWorkerQuartzOptions>(options =>
    9. {
    10. options.IsAutoRegisterEnabled = false;
    11. });
    12. }

    例如你有一个每10分钟执行一次的工作者,但由于服务器不可用30分钟导致工作者错过了3次执行,你想要在服务器恢复正常后执行所有错过的执行. 你应该这样定义你的工作者:

    在示例中我们定义了工作者执行间隔为10分钟,并且设置 WithMisfireHandlingInstructionIgnoreMisfires ,另外自定义 仅当工作者不存在时向quartz添加调度作业.

    更多