feat: Сервисы и модели RabbitMq разнесены согласно архитектуры

This commit is contained in:
Mikhail Trubnikov
2026-04-14 12:01:49 +10:00
parent 734c2e3c99
commit e892aa12d3
196 changed files with 589 additions and 1232 deletions

View File

@@ -0,0 +1,78 @@
using Microsoft.Extensions.Logging;
using PARR.Core.Common.RabbitServices;
using PARR.Domain.DTOs.RabbitApi;
using PARR.Domain.Settings;
using System.Net;
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;
namespace PARR.Infrastructure.Rabbit
{
internal class RabbitAdminService : IRabbitAdminService
{
private readonly HttpClient httpClient;
private readonly ILogger<RabbitAdminService> logger;
public RabbitAdminService(HttpClient httpClient, ILogger<RabbitAdminService> logger)
{
this.httpClient = httpClient;
this.logger = logger;
}
public async Task<RabbitApiResult> GetConnectionsAsync(IMqSettings mqSettings)
{
var url = $"http://{mqSettings.HostName}:15672/api/connections";
return await SendRequestAsync(mqSettings, url);
}
public async Task<RabbitApiResult> GetQueuesAsync(IMqSettings mqSettings)
{
var url = $"http://{mqSettings.HostName}:15672/api/queues";
return await SendRequestAsync(mqSettings, url);
}
private async Task<RabbitApiResult> SendRequestAsync(IMqSettings mqSettings, string url)
{
SetAuthorizationHeaders(mqSettings);
try
{
var result = await httpClient.GetAsync(url);
if (result.StatusCode == HttpStatusCode.OK)
{
var content = await result.Content.ReadAsStringAsync();
var json = JsonSerializer.Deserialize<object>(content);
return new RabbitApiResult { IsSuccess = true, Response = json };
}
else
{
logger.LogError($"Ошибка при запросе к RabbitMq, url: {url}, StatusCode: {result.StatusCode}");
return new RabbitApiResult { IsSuccess = false };
}
}
catch (Exception ex)
{
logger.LogError(ex, $"Ошибка при запросе к RabbitMQ, url: {url}");
return new RabbitApiResult { IsSuccess = false, Exception = ex };
}
}
private void SetAuthorizationHeaders(IMqSettings mqSettings)
{
httpClient.DefaultRequestHeaders.Clear();
httpClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.ASCII.GetBytes($"{mqSettings.User}:{mqSettings.Password}")));
}
}
}