feat(docker, api, core, dal, domain, workloadBuilder): WorkloadBuillder - формирование кэша по интервалу.

This commit is contained in:
Mikhail Trubnikov
2026-05-19 09:45:38 +10:00
parent e5535857d4
commit 178d136dba
16 changed files with 180 additions and 11 deletions

View 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);
}
}
}

View File

@@ -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();

View File

@@ -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);
}

View File

@@ -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; }
}
}

View File

@@ -28,6 +28,7 @@
"QueueName": "parr-task-workload",
"User": "task_workload_reader",
"Password": "sdjfgIYFdifyKJFDhvsad@!314d"
}
},
"RepeatEvery": "12:00:00"
}
}