From f42c8b014e4bd84a7d8671da3bd1bc28c1dfa124 Mon Sep 17 00:00:00 2001 From: Mikhail Trubnikov Date: Fri, 22 Sep 2023 09:08:13 +1000 Subject: [PATCH] =?UTF-8?q?EsppTemplateSync=20=D0=BF=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20=D0=BD=D0=B0=20IMqService?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PARR.EsppTemplateSync.csproj | 1 - .../Services/ParserService.cs | 1 + .../Settings/GlobalSettings.cs | 14 ++-- PARR.EsppTemplateSync/TemplateMQSyncer.cs | 71 +++---------------- .../appsettings.Development.json | 24 ------- PARR.EsppTemplateSyncWorker/appsettings.json | 2 +- PARR.MockData/Program.cs | 1 + 7 files changed, 19 insertions(+), 95 deletions(-) diff --git a/PARR.EsppTemplateSync/PARR.EsppTemplateSync.csproj b/PARR.EsppTemplateSync/PARR.EsppTemplateSync.csproj index e62a0566..3737e35b 100644 --- a/PARR.EsppTemplateSync/PARR.EsppTemplateSync.csproj +++ b/PARR.EsppTemplateSync/PARR.EsppTemplateSync.csproj @@ -9,7 +9,6 @@ - diff --git a/PARR.EsppTemplateSync/Services/ParserService.cs b/PARR.EsppTemplateSync/Services/ParserService.cs index ea063950..30228597 100644 --- a/PARR.EsppTemplateSync/Services/ParserService.cs +++ b/PARR.EsppTemplateSync/Services/ParserService.cs @@ -61,6 +61,7 @@ namespace PARR.EsppTemplateSync.Services var template = new EsppTemplate { Name = name, + // todo: tryparse??? IsActive IsActive = bool.Parse(isActive), WorkGroup = workGroup, ShortDescription = shortDescription, diff --git a/PARR.EsppTemplateSync/Settings/GlobalSettings.cs b/PARR.EsppTemplateSync/Settings/GlobalSettings.cs index 1f69926b..7a6fd582 100644 --- a/PARR.EsppTemplateSync/Settings/GlobalSettings.cs +++ b/PARR.EsppTemplateSync/Settings/GlobalSettings.cs @@ -1,4 +1,6 @@ -namespace PARR.EsppTemplateSync.Settings +using PARR.BLL.Contracts.Interfaces; + +namespace PARR.EsppTemplateSync.Settings { internal class GlobalSettings { @@ -9,12 +11,12 @@ public string ParsingSeparator { get; set; } = "<|>"; } - internal class MqSettings + internal class MqSettings : IMqSettings { - public string? HostName { get; set; } - public string? QueueName { get; set; } - public string? UserName { get; set; } - public string? Password { get; set; } + public string HostName { get; set; } = string.Empty; + public string QueueName { get; set; } = string.Empty; + public string User { get; set; } = string.Empty; + public string Password { get; set; } = string.Empty; } internal class StorageSettings diff --git a/PARR.EsppTemplateSync/TemplateMQSyncer.cs b/PARR.EsppTemplateSync/TemplateMQSyncer.cs index 8654b014..a7192008 100644 --- a/PARR.EsppTemplateSync/TemplateMQSyncer.cs +++ b/PARR.EsppTemplateSync/TemplateMQSyncer.cs @@ -1,9 +1,7 @@ using Microsoft.Extensions.Logging; +using PARR.BLL.Services.Interfaces; using PARR.EsppTemplateSync.Services; using PARR.EsppTemplateSync.Settings; -using RabbitMQ.Client; -using RabbitMQ.Client.Events; -using System.Text; namespace PARR.EsppTemplateSync { @@ -12,19 +10,19 @@ namespace PARR.EsppTemplateSync private readonly ILogger logger; private readonly IManager manager; private readonly GlobalSettings globalSettings; - - private IConnection? connection; - private IModel? channel; + private readonly IMqService mqService; public TemplateMQSyncer( ILogger logger, IManager manager, - GlobalSettings globalSettings + GlobalSettings globalSettings, + IMqService mqService ) { this.logger = logger; this.manager = manager; this.globalSettings = globalSettings; + this.mqService = mqService; if (globalSettings.MqSettings == null) { @@ -35,70 +33,17 @@ namespace PARR.EsppTemplateSync public void Start() { - InitConnection(); + mqService.Received += async (msg) => await manager.ManageStringAsync(msg); + mqService.InitConsumer(globalSettings!.MqSettings!); logger.LogInformation($"Запущена проверка очереди {globalSettings.MqSettings!.QueueName}."); - - GetMessages();//TODO переименовать в какой-нибудь AttachListener } public void Stop() { - channel?.Close(); - connection?.Close(); + mqService.Dispose(); logger.LogInformation($"=== === === Соединение с очередью {globalSettings.MqSettings!.QueueName} закрыто === === ==="); } - - private void InitConnection() - { - logger.LogInformation($"Устанавливаю соединение с RabbitMQ: {globalSettings.MqSettings!.HostName}"); - - var factory = new ConnectionFactory { HostName = globalSettings.MqSettings!.HostName }; - factory.UserName = globalSettings.MqSettings.UserName; - factory.Password = globalSettings.MqSettings.Password; - factory.AutomaticRecoveryEnabled = true; - factory.DispatchConsumersAsync = true; - - connection = factory.CreateConnection(); - channel = connection.CreateModel(); - - var args = new Dictionary - { - { "x-queue-mode", "lazy" } - }; - - channel.QueueDeclare(queue: globalSettings.MqSettings.QueueName, - durable: true, - exclusive: false, - autoDelete: false, - arguments: args); - - logger.LogInformation("Соединение с RabbitMQ установлено."); - } - - private void GetMessages() - { - if (channel == null || connection == null) - { - logger.LogError("Отсутствует соедниение с RabbitMQ."); - return; - } - - var consumer = new AsyncEventingBasicConsumer(channel); - - consumer.Received += async (ch, ea) => - { - var content = Encoding.UTF8.GetString(ea.Body.ToArray()); - logger.LogDebug($"Получено сообщение: {content}"); - - await manager.ManageStringAsync(content); - - channel.BasicAck(ea.DeliveryTag, false); - await Task.Yield(); - }; - - channel.BasicConsume(globalSettings.MqSettings!.QueueName, false, consumer); - } } } diff --git a/PARR.EsppTemplateSyncWorker/appsettings.Development.json b/PARR.EsppTemplateSyncWorker/appsettings.Development.json index f82e16f5..d250dadc 100644 --- a/PARR.EsppTemplateSyncWorker/appsettings.Development.json +++ b/PARR.EsppTemplateSyncWorker/appsettings.Development.json @@ -1,7 +1,4 @@ { - "ConnectionStrings": { - "DefaultConnection": "Server=10.99.253.184;Database=parr;User Id=app_parr; Password=PosdfkhT&)%sdfligL&%5546;" - }, "Logging": { "LogLevel": { "Default": "Information", @@ -25,26 +22,5 @@ } } ] - }, - "StorageSettings": { - "StoragePath": "Data", - "EsppTemplates": { - "AllowedExtensions": [ ".csv" ], - "MaxFileSizeMb": 100 - } - }, - "GlobalSettings": { - "MqSettings": { - "HostName": "10.99.253.216", - "QueueName": "parr-espp-templates", - "UserName": "espp_templates_reader", - "Password": "P@ssReaderPtk202!" - - }, - "StorageSettings": { - "CheckIntervalSeconds": 30 - }, - "IgnoreTemplateFields": [ "Id", "Status", "Name", "DateCreated", "DateModified", "StatusCode" ], - "ParsingSeparator": "<|>" } } diff --git a/PARR.EsppTemplateSyncWorker/appsettings.json b/PARR.EsppTemplateSyncWorker/appsettings.json index f82e16f5..8fc66da7 100644 --- a/PARR.EsppTemplateSyncWorker/appsettings.json +++ b/PARR.EsppTemplateSyncWorker/appsettings.json @@ -37,7 +37,7 @@ "MqSettings": { "HostName": "10.99.253.216", "QueueName": "parr-espp-templates", - "UserName": "espp_templates_reader", + "User": "espp_templates_reader", "Password": "P@ssReaderPtk202!" }, diff --git a/PARR.MockData/Program.cs b/PARR.MockData/Program.cs index 4e16ba60..6140f89a 100644 --- a/PARR.MockData/Program.cs +++ b/PARR.MockData/Program.cs @@ -1,6 +1,7 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using PARR.DAL; +using PARR.MockData; using PARR.MockData.Services; using Serilog;