Package Description
$ dotnet add package Reo.Core.Queue.ValidatorПакет Reo.Core.Queue.Validator предназначен для проверки существования очередей в системе сообщений (например, RabbitMQ) на этапе запуска приложения. Это позволяет избежать ошибок, связанных с отсутствием необходимых очередей, и обеспечивает стабильность приложения.
Решаемые проблемы:
Функции:
QueueNameAttribute).ILogger.| Компонент | Описание |
|---|---|
IQueueExistsValidator | Интерфейс, определяющий метод ValidateAsync, который проверяет существование всех зарегистрированных очередей. |
QueueExistsValidator | Реализация валидатора, использующая IServiceBusClient для проверки очередей и IQueueNameStorage для получения списка имен очередей. |
IQueueNameStorage | Интерфейс для получения списка имен очередей, зарегистрированных в приложении. |
AssemblyQueueNameStorage | Реализация, которая сканирует сборки и ищет типы с атрибутом QueueNameAttribute для определения имен очередей. |
IServiceBusClient | Интерфейс для взаимодействия с шиной данных (RabbitMQ). |
RabbitMqServiceBusClient | Реализация клиента для проверки существования очередей в RabbitMQ. |
FluentValidation (для генерации ошибок валидации)RabbitMQ.Client (для работы с RabbitMQ)Microsoft.Extensions.Logging (для логирования)Install-Package Reo.Core.Queue.Validatordotnet add package Reo.Core.Queue.ValidatorДобавьте зависимости в Startup.cs или Program.cs:
services.AddQueueValidator<MyQueueHandlerAssembly>();или с явным указанием сборки:
services.AddQueueValidator(Assembly.Load("MyQueueHandlers"));Конфигурационные параметры:
[QueueName("my-queue-name")] на типах, чтобы указать имя очереди.ILogger автоматически интегрируется в приложение.public class MyService
{
private readonly IQueueExistsValidator _validator;
public MyService(IQueueExistsValidator validator)
{
_validator = validator;
}
public async Task InitializeAsync()
{
var result = await _validator.ValidateAsync();
if (!result.IsValid)
{
throw new InvalidOperationException("Несуществующие очереди: " + string.Join(", ", result.Errors));
}
}
}app.Use(async (context, next) =>
{
var validator = context.RequestServices.GetRequiredService<IQueueExistsValidator>();
var result = await validator.ValidateAsync();
if (!result.IsValid)
{
context.Response.StatusCode = 500;
await context.Response.WriteAsync("Ошибка: " + string.Join(", ", result.Errors));
return;
}
await next();
});Данный пакет распространяется под лицензией MIT.