EsppTemplateSync переделал на IMqService
This commit is contained in:
@@ -9,7 +9,6 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.1" />
|
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.1" />
|
||||||
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="7.0.4" />
|
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="7.0.4" />
|
||||||
<PackageReference Include="RabbitMQ.Client" Version="6.5.0" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -61,6 +61,7 @@ namespace PARR.EsppTemplateSync.Services
|
|||||||
var template = new EsppTemplate
|
var template = new EsppTemplate
|
||||||
{
|
{
|
||||||
Name = name,
|
Name = name,
|
||||||
|
// todo: tryparse??? IsActive
|
||||||
IsActive = bool.Parse(isActive),
|
IsActive = bool.Parse(isActive),
|
||||||
WorkGroup = workGroup,
|
WorkGroup = workGroup,
|
||||||
ShortDescription = shortDescription,
|
ShortDescription = shortDescription,
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
namespace PARR.EsppTemplateSync.Settings
|
using PARR.BLL.Contracts.Interfaces;
|
||||||
|
|
||||||
|
namespace PARR.EsppTemplateSync.Settings
|
||||||
{
|
{
|
||||||
internal class GlobalSettings
|
internal class GlobalSettings
|
||||||
{
|
{
|
||||||
@@ -9,12 +11,12 @@
|
|||||||
public string ParsingSeparator { get; set; } = "<|>";
|
public string ParsingSeparator { get; set; } = "<|>";
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class MqSettings
|
internal class MqSettings : IMqSettings
|
||||||
{
|
{
|
||||||
public string? HostName { get; set; }
|
public string HostName { get; set; } = string.Empty;
|
||||||
public string? QueueName { get; set; }
|
public string QueueName { get; set; } = string.Empty;
|
||||||
public string? UserName { get; set; }
|
public string User { get; set; } = string.Empty;
|
||||||
public string? Password { get; set; }
|
public string Password { get; set; } = string.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class StorageSettings
|
internal class StorageSettings
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
using PARR.BLL.Services.Interfaces;
|
||||||
using PARR.EsppTemplateSync.Services;
|
using PARR.EsppTemplateSync.Services;
|
||||||
using PARR.EsppTemplateSync.Settings;
|
using PARR.EsppTemplateSync.Settings;
|
||||||
using RabbitMQ.Client;
|
|
||||||
using RabbitMQ.Client.Events;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace PARR.EsppTemplateSync
|
namespace PARR.EsppTemplateSync
|
||||||
{
|
{
|
||||||
@@ -12,19 +10,19 @@ namespace PARR.EsppTemplateSync
|
|||||||
private readonly ILogger<TemplateMQSyncer> logger;
|
private readonly ILogger<TemplateMQSyncer> logger;
|
||||||
private readonly IManager manager;
|
private readonly IManager manager;
|
||||||
private readonly GlobalSettings globalSettings;
|
private readonly GlobalSettings globalSettings;
|
||||||
|
private readonly IMqService mqService;
|
||||||
private IConnection? connection;
|
|
||||||
private IModel? channel;
|
|
||||||
|
|
||||||
public TemplateMQSyncer(
|
public TemplateMQSyncer(
|
||||||
ILogger<TemplateMQSyncer> logger,
|
ILogger<TemplateMQSyncer> logger,
|
||||||
IManager manager,
|
IManager manager,
|
||||||
GlobalSettings globalSettings
|
GlobalSettings globalSettings,
|
||||||
|
IMqService mqService
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
this.logger = logger;
|
this.logger = logger;
|
||||||
this.manager = manager;
|
this.manager = manager;
|
||||||
this.globalSettings = globalSettings;
|
this.globalSettings = globalSettings;
|
||||||
|
this.mqService = mqService;
|
||||||
|
|
||||||
if (globalSettings.MqSettings == null)
|
if (globalSettings.MqSettings == null)
|
||||||
{
|
{
|
||||||
@@ -35,70 +33,17 @@ namespace PARR.EsppTemplateSync
|
|||||||
|
|
||||||
public void Start()
|
public void Start()
|
||||||
{
|
{
|
||||||
InitConnection();
|
mqService.Received += async (msg) => await manager.ManageStringAsync(msg);
|
||||||
|
mqService.InitConsumer(globalSettings!.MqSettings!);
|
||||||
|
|
||||||
logger.LogInformation($"Запущена проверка очереди {globalSettings.MqSettings!.QueueName}.");
|
logger.LogInformation($"Запущена проверка очереди {globalSettings.MqSettings!.QueueName}.");
|
||||||
|
|
||||||
GetMessages();//TODO переименовать в какой-нибудь AttachListener
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Stop()
|
public void Stop()
|
||||||
{
|
{
|
||||||
channel?.Close();
|
mqService.Dispose();
|
||||||
connection?.Close();
|
|
||||||
|
|
||||||
logger.LogInformation($"=== === === Соединение с очередью {globalSettings.MqSettings!.QueueName} закрыто === === ===");
|
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<string, object>
|
|
||||||
{
|
|
||||||
{ "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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,4 @@
|
|||||||
{
|
{
|
||||||
"ConnectionStrings": {
|
|
||||||
"DefaultConnection": "Server=10.99.253.184;Database=parr;User Id=app_parr; Password=PosdfkhT&)%sdfligL&%5546;"
|
|
||||||
},
|
|
||||||
"Logging": {
|
"Logging": {
|
||||||
"LogLevel": {
|
"LogLevel": {
|
||||||
"Default": "Information",
|
"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": "<|>"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,7 +37,7 @@
|
|||||||
"MqSettings": {
|
"MqSettings": {
|
||||||
"HostName": "10.99.253.216",
|
"HostName": "10.99.253.216",
|
||||||
"QueueName": "parr-espp-templates",
|
"QueueName": "parr-espp-templates",
|
||||||
"UserName": "espp_templates_reader",
|
"User": "espp_templates_reader",
|
||||||
"Password": "P@ssReaderPtk202!"
|
"Password": "P@ssReaderPtk202!"
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Hosting;
|
using Microsoft.Extensions.Hosting;
|
||||||
using PARR.DAL;
|
using PARR.DAL;
|
||||||
|
using PARR.MockData;
|
||||||
using PARR.MockData.Services;
|
using PARR.MockData.Services;
|
||||||
using Serilog;
|
using Serilog;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user