Quartz 后台作业管理器
Quartz 是一个高级的后台作业管理器。您可以将 Quartz 与 ABP 集成,用它替代 默认的后台作业管理器 。这样,您可以使用统一的后台作业 API,使代码与 Quartz 解耦。当然,如果您愿意,也可以直接使用 Quartz 的 API。
关于如何使用后台作业系统,请参阅 后台作业文档 。本文档仅介绍如何安装和配置 Quartz 集成。
安装
建议使用 ABP CLI 来安装此包。
使用 ABP CLI
在项目文件夹(.csproj 文件所在目录)打开命令行窗口,输入以下命令:
abp add-package Volo.Abp.BackgroundJobs.Quartz
手动安装
如需手动安装:
将 Volo.Abp.BackgroundJobs.Quartz NuGet 包添加到您的项目:
dotnet add package Volo.Abp.BackgroundJobs.Quartz在模块的依赖列表中添加
AbpBackgroundJobsQuartzModule:
[DependsOn(
//...其他依赖
typeof(AbpBackgroundJobsQuartzModule) //添加新模块依赖
)]
public class YourModule : AbpModule
{
}
配置
Quartz 是一个高度可配置的库,ABP 为此提供了 AbpQuartzOptions。您可以在模块类中使用 PreConfigure 方法预先配置此选项。ABP 在初始化 Quartz 模块时会使用该配置。例如:
[DependsOn(
//...其他依赖
typeof(AbpBackgroundJobsQuartzModule) //添加新模块依赖
)]
public class YourModule : AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)
{
var configuration = context.Services.GetConfiguration();
PreConfigure<AbpQuartzOptions>(options =>
{
options.Properties = new NameValueCollection
{
["quartz.jobStore.dataSource"] = "BackgroundJobsDemoApp",
["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz",
["quartz.jobStore.tablePrefix"] = "QRTZ_",
["quartz.serializer.type"] = "json",
["quartz.dataSource.BackgroundJobsDemoApp.connectionString"] = configuration.GetConnectionString("Quartz"),
["quartz.dataSource.BackgroundJobsDemoApp.provider"] = "SqlServer",
["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz",
};
});
}
}
从 ABP 3.1 版本开始,我们向 AbpQuartzOptions 添加了 Configurator 用于配置 Quartz。例如:
[DependsOn(
//...其他依赖
typeof(AbpBackgroundJobsQuartzModule) //添加新模块依赖
)]
public class YourModule : AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)
{
var configuration = context.Services.GetConfiguration();
PreConfigure<AbpQuartzOptions>(options =>
{
options.Configurator = configure =>
{
configure.UsePersistentStore(storeOptions =>
{
storeOptions.UseProperties = true;
storeOptions.UseJsonSerializer();
storeOptions.UseSqlServer(configuration.GetConnectionString("Quartz"));
storeOptions.UseClustering(c =>
{
c.CheckinMisfireThreshold = TimeSpan.FromSeconds(20);
c.CheckinInterval = TimeSpan.FromSeconds(10);
});
});
};
});
}
}
您可以选择自己喜欢的方式来配置 Quartz。
Quartz 默认将作业和调度信息存储在内存中。上述示例中,我们通过选项模式的预配置将其改为数据库存储。更多 Quartz 配置请参考 Quartz 的官方文档。
异常处理
默认异常处理策略
当后台作业发生异常时,ABP 提供默认处理策略:每 3 秒重试一次,最多重试 3 次。您可以通过 AbpBackgroundJobQuartzOptions 选项更改重试次数和重试间隔:
[DependsOn(
//...其他依赖
typeof(AbpBackgroundJobsQuartzModule) //添加新模块依赖
)]
public class YourModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpBackgroundJobQuartzOptions>(options =>
{
options.RetryCount = 1;
options.RetryIntervalMillisecond = 1000;
});
}
}
自定义异常处理策略
您可以通过 AbpBackgroundJobQuartzOptions 选项自定义异常处理策略:
[DependsOn(
//...其他依赖
typeof(AbpBackgroundJobsQuartzModule) //添加新模块依赖
)]
public class YourModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpBackgroundJobQuartzOptions>(options =>
{
options.RetryStrategy = async (retryIndex, executionContext, exception) =>
{
// 自定义异常处理逻辑
};
});
}
}
抠丁客


