feat(docker, api, core, dal, domain, workloadBuilder): WorkloadBuillder - формирование кэша по интервалу.
This commit is contained in:
25
PARR.WorkloadBuilderWorker/IntervalWorker.cs
Normal file
25
PARR.WorkloadBuilderWorker/IntervalWorker.cs
Normal file
@@ -0,0 +1,25 @@
|
||||
using PARR.Core.Services.Workload.Interfaces;
|
||||
using PARR.WorkloadBuilderWorker.Settings;
|
||||
|
||||
namespace PARR.WorkloadBuilderWorker
|
||||
{
|
||||
public class IntervalWorker : BackgroundService
|
||||
{
|
||||
private readonly ILogger<IntervalWorker> logger;
|
||||
private readonly IWorkloadIntervalService workloadIntervalService;
|
||||
private readonly WorkerSettings workerSettings;
|
||||
|
||||
public IntervalWorker(ILogger<IntervalWorker> logger, IWorkloadIntervalService workloadIntervalService, WorkerSettings workerSettings)
|
||||
{
|
||||
this.logger = logger;
|
||||
this.workloadIntervalService = workloadIntervalService;
|
||||
this.workerSettings = workerSettings;
|
||||
}
|
||||
|
||||
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
||||
{
|
||||
logger.LogInformation("Запуск {workerName}", nameof(IntervalWorker));
|
||||
await workloadIntervalService.StartAsync(workerSettings.RepeatEvery, workerSettings.MqSettings);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -46,8 +46,25 @@ builder.Configuration.AddDalConfigurations(builder.Services);
|
||||
builder.Services.AddDallSettings(builder.Configuration);
|
||||
#endregion
|
||||
|
||||
// Задается через переменные окружеия
|
||||
var runRabbit = builder.Configuration.GetValue<bool>("ENABLE_RABBIT", true);
|
||||
var runInterval = builder.Configuration.GetValue<bool>("ENABLE_INTERVAL", true);
|
||||
|
||||
builder.Services.AddHostedService<Worker>();
|
||||
if (runRabbit)
|
||||
{
|
||||
builder.Services.AddHostedService<RabbitWorker>();
|
||||
}
|
||||
|
||||
if (runInterval)
|
||||
{
|
||||
builder.Services.AddHostedService<IntervalWorker>();
|
||||
}
|
||||
|
||||
// Настройка краша при ошибке. Если хоть один из воркеров упадет, то падает целиком проект
|
||||
builder.Services.Configure<HostOptions>(options =>
|
||||
{
|
||||
options.BackgroundServiceExceptionBehavior = BackgroundServiceExceptionBehavior.StopHost;
|
||||
});
|
||||
|
||||
var host = builder.Build();
|
||||
host.Run();
|
||||
|
||||
@@ -3,13 +3,15 @@ using PARR.WorkloadBuilderWorker.Settings;
|
||||
|
||||
namespace PARR.WorkloadBuilderWorker
|
||||
{
|
||||
public class Worker : BackgroundService
|
||||
public class RabbitWorker : BackgroundService
|
||||
{
|
||||
private readonly ILogger<RabbitWorker> logger;
|
||||
private readonly IWorkloadCacheBuilderService workloadCacheBuilderService;
|
||||
private readonly WorkerSettings workerSettings;
|
||||
|
||||
public Worker(ILogger<Worker> logger, IWorkloadCacheBuilderService workloadCacheBuilderService, WorkerSettings WorkerSettings)
|
||||
public RabbitWorker(ILogger<RabbitWorker> logger, IWorkloadCacheBuilderService workloadCacheBuilderService, WorkerSettings WorkerSettings)
|
||||
{
|
||||
this.logger = logger;
|
||||
this.workloadCacheBuilderService = workloadCacheBuilderService;
|
||||
this.workerSettings = WorkerSettings;
|
||||
}
|
||||
@@ -17,6 +19,7 @@ namespace PARR.WorkloadBuilderWorker
|
||||
|
||||
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
||||
{
|
||||
logger.LogInformation("Запуск {workerName}", nameof(RabbitWorker));
|
||||
await workloadCacheBuilderService.ProcessMessagesAsync(workerSettings.MqSettings);
|
||||
}
|
||||
|
||||
@@ -4,6 +4,14 @@ namespace PARR.WorkloadBuilderWorker.Settings
|
||||
{
|
||||
public record WorkerSettings
|
||||
{
|
||||
/// <summary>
|
||||
/// Настройки MQ
|
||||
/// </summary>
|
||||
public MqSettingsBase MqSettings { get; init; } = new();
|
||||
|
||||
/// <summary>
|
||||
/// Интервал повторений
|
||||
/// </summary>
|
||||
public TimeSpan RepeatEvery { get; init; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
"QueueName": "parr-task-workload",
|
||||
"User": "task_workload_reader",
|
||||
"Password": "sdjfgIYFdifyKJFDhvsad@!314d"
|
||||
}
|
||||
},
|
||||
"RepeatEvery": "12:00:00"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user