99 lines
3.7 KiB
C#
99 lines
3.7 KiB
C#
using PostFundManagement.Domain.Abstractions;
|
|
using PostFundManagement.Domain.Quartz;
|
|
using static PostFundManagement.Domain.Extensions.Constants;
|
|
|
|
namespace PostFundManagement.Application.Extensions;
|
|
|
|
public static class Quartz
|
|
{
|
|
public static IServiceCollection AddQuartzSchedulerClient(this IServiceCollection services, string schedulerName, IConfiguration configuration)
|
|
{
|
|
var connectionString = configuration.GetConnectionString(DatabaseConfigName);
|
|
|
|
services.Configure<QuartzOptions>(options =>
|
|
{
|
|
options.Properties["quartz.scheduler.instanceName"] = schedulerName;
|
|
options.Properties["quartz.scheduler.instanceId"] = "AUTO";
|
|
});
|
|
|
|
services.ConfigureCommon();
|
|
|
|
services.AddQuartz(config =>
|
|
{
|
|
config.UseSimpleTypeLoader();
|
|
config.UseDefaultThreadPool(options => options.MaxConcurrency = 0);
|
|
config.UseTimeZoneConverter();
|
|
|
|
config.UsePersistentStore(storage =>
|
|
{
|
|
storage.ProvisionSchema();
|
|
storage.UsePostgres(options => options.ConnectionString = connectionString!);
|
|
|
|
storage.UseSystemTextJsonSerializer();
|
|
|
|
storage.UseClustering(cluster =>
|
|
{
|
|
cluster.CheckinInterval = TimeSpan.FromSeconds(30);
|
|
cluster.CheckinMisfireThreshold = TimeSpan.FromSeconds(90);
|
|
});
|
|
});
|
|
});
|
|
|
|
return services;
|
|
}
|
|
|
|
public static IServiceCollection AddQuartzScheduler(this IServiceCollection services, string schedulerName, IConfiguration configuration)
|
|
{
|
|
var connectionString = configuration.GetConnectionString(DatabaseConfigName);
|
|
|
|
services.Configure<QuartzOptions>(options =>
|
|
{
|
|
options.Properties["quartz.scheduler.instanceName"] = schedulerName;
|
|
options.Properties["quartz.scheduler.instanceId"] = "AUTO";
|
|
options.Properties["quartz.scheduler.batchTriggerAcquisitionMaxCount"] = "5";
|
|
options.Properties["quartz.jobStore.misfireThreshold"] = TimeSpan.FromMinutes(2).TotalMilliseconds.ToString(CultureInfo.InvariantCulture);
|
|
|
|
options.Properties["quartz.plugin.jobHistory.type"] = "Quartz.Plugin.History.LoggingJobHistoryPlugin, Quartz.Plugins";
|
|
options.Properties["quartz.plugin.triggerHistory.type"] = "Quartz.Plugin.History.LoggingTriggerHistoryPlugin, Quartz.Plugins";
|
|
});
|
|
|
|
services.ConfigureCommon();
|
|
|
|
services.AddQuartzHostedService(options =>
|
|
{
|
|
options.WaitForJobsToComplete = true;
|
|
});
|
|
|
|
services.AddQuartz(config =>
|
|
{
|
|
config.UseSimpleTypeLoader();
|
|
config.UseDefaultThreadPool(options => options.MaxConcurrency = 5);
|
|
config.UseTimeZoneConverter();
|
|
|
|
config.UsePersistentStore(storage =>
|
|
{
|
|
storage.ProvisionSchema();
|
|
storage.UsePostgres(options => options.ConnectionString = connectionString!);
|
|
|
|
storage.UseSystemTextJsonSerializer();
|
|
|
|
storage.UseClustering(cluster =>
|
|
{
|
|
cluster.CheckinInterval = TimeSpan.FromSeconds(30);
|
|
cluster.CheckinMisfireThreshold = TimeSpan.FromSeconds(90);
|
|
});
|
|
});
|
|
});
|
|
|
|
return services;
|
|
}
|
|
|
|
private static IServiceCollection ConfigureCommon(this IServiceCollection services)
|
|
{
|
|
services.Configure<QuartzOptions>(options => options.Scheduling.IgnoreDuplicates = true);
|
|
services.AddTransient<RetryJobListener>();
|
|
services.AddTransient<IJobOrchestrator, JobOrchestrator>();
|
|
|
|
return services;
|
|
}
|
|
} |