Files
parr_api/PARR.TemplateGeneratorWorker/Worker.cs

69 lines
2.3 KiB
C#

using PARR.BLL.Contracts.Interfaces;
using PARR.BLL.Services.Interfaces;
using PARR.DAL.DomainServices.Interfaces;
using PARR.DAL.Services.Interfaces;
using PARR.DAL.Services.Interfaces.Job;
using PARR.TemplateGeneratorWorker.Services;
using PARR.TemplateGeneratorWorker.Settings;
namespace PARR.TemplateGeneratorWorker
{
public class Worker : BackgroundService
{
private readonly ILogger<Worker> logger;
private readonly IMqSettings mqSettings;
private readonly IMqService mqService;
private readonly IServiceProvider serviceProvider;
private readonly ITransformService transformService;
private readonly IValidatorService validatorService;
private readonly IJobService jobService;
private readonly IShortcodesService shortcodesService;
private readonly ITemplateService templateService;
public Worker(
ILogger<Worker> logger,
MqSettings mqSettings,
IMqService mqService,
IServiceProvider serviceProvider
)
{
this.logger = logger;
this.mqSettings = mqSettings;
this.mqService = mqService;
this.serviceProvider = serviceProvider;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
var isConnected = mqService.InitConsumer(mqSettings, GenerateTemplateAsync);
if (!isConnected)
throw new Exception("Îøèáêà ïðè ïîäêëþ÷åíèè ê RabbitMq");
}
}
public override Task StopAsync(CancellationToken cancellationToken)
{
mqService.Dispose();
return base.StopAsync(cancellationToken);
}
private async Task GenerateTemplateAsync(string msg)
{
using (var scope = serviceProvider.CreateScope())
{
var templateGenerator = scope.ServiceProvider.GetService<ITemplateGenerator>();
if (templateGenerator == null)
throw new Exception($"Íå íàéäåí ñåðâèñ: {nameof(ITemplateGenerator)}");
await templateGenerator.GenerateTemplateAsync(msg);
}
}
}
}