Легковесная .NET-библиотека для интеграции с RabbitMQ через готовые building blocks:
Publisherдля отправки сообщенийClientдля request/response (RPC-подобный сценарий)ControllerServerдля обработки входящих сообщений через контроллеры и middleware
Библиотека ориентирована на использование через IHostedService и IServiceCollection.
dotnet add package Ebceys.RabbitMq- Fluent-конфигурация через
RabbitMQConfigurationBuilder - Готовые дефолтные реализации:
DefaultRabbitMqClientDefaultRabbitMqControllerServerDefaultJsonSerializer
- Расширения для DI и keyed DI
- Поддержка typed-сериализаторов для отдельных типов сообщений
- Middleware pipeline для controller-сервера
using Ebceys.RabbitMq.Configuration;
using Ebceys.RabbitMq.DependencyInjection;
using RabbitMQ.Client;
var rabbitConfig = new RabbitMQConfigurationBuilder()
.AddConnectionFactory(new ConnectionFactory
{
HostName = "localhost",
UserName = "guest",
Password = "guest"
})
.AddQueueConfiguration(new QueueConfiguration("app.events")
{
RoutingKey = "app.events"
})
.AddExchangeConfiguration(new ExchangeConfiguration("app.exchange", ExchangeTypes.Topic))
.AddCallbackConfiguration(new CallbackRabbitMQConfiguration(
new QueueConfiguration("app.events.reply") { RoutingKey = "app.events.reply" },
TimeSpan.FromSeconds(5)))
.Build();
services
.AddRabbitMqClient<DefaultRabbitMqClient>(rabbitConfig)
.AddDefaultSerializerToDi()
.AddDefaultPublisherToDi()
.AddDefaultCallbackServerToDi()
.Register();
services
.AddRabbitMqControllerServer<DefaultRabbitMqControllerServer>(rabbitConfig)
.AddDefaultSerializerToDi()
.AddDefaultResponsePublisherToDi()
.Register();using Ebceys.RabbitMq.Client;
using Ebceys.RabbitMq.Client.Models;
using Ebceys.RabbitMq.Controllers;
using Ebceys.RabbitMq.Controllers.Attributes;
using Ebceys.RabbitMq.Serializers;
public sealed class BillingRabbitMqClient(
IRabbitMqPublisher publisher,
IRabbitMqMessageSerializer serializer,
IEnumerable<IRabbitMqTypedSerializer> typed,
RabbitMqClientCallbackServer callback)
: DefaultRabbitMqClient(publisher, serializer, typed, callback)
{
public Task PublishInvoiceCreatedAsync(InvoiceCreated message, CancellationToken ct = default)
{
var request = new RabbitMqRequest("billing.invoice-created");
request.AddParameter(message);
return SendMessageAsync(request, "billing.exchange", "billing.invoice-created", token: ct);
}
public Task<InvoiceStatus?> GetInvoiceStatusAsync(Guid invoiceId, CancellationToken ct = default)
{
var request = new RabbitMqRequest("billing.invoice-status");
request.AddParameter(invoiceId);
return SendRequestAsync<InvoiceStatus>(
request,
"billing.exchange",
"billing.invoice-status",
TimeSpan.FromSeconds(5),
ct);
}
}
public sealed class BillingController : RabbitMqControllerBase
{
[RabbitMqMethod("billing.invoice-status")]
public InvoiceStatus HandleStatus(Guid invoiceId)
{
return new InvoiceStatus(invoiceId, "paid");
}
}
public sealed record InvoiceCreated(Guid InvoiceId, decimal Amount);
public sealed record InvoiceStatus(Guid InvoiceId, string Status);- Общая карта документации:
docs/README.md - Быстрый старт:
docs/guides/quick-start.md - Настройка конфигурации:
docs/guides/configuration.md - Регистрация в DI:
docs/guides/di-registration.md
docs/modules/client.mddocs/modules/configuration.mddocs/modules/controllers.mddocs/modules/dependency-injection.mddocs/modules/serializers.mddocs/modules/server.md
docs/api/public-api.mddocs/api/production-source-map.md
По текущей конфигурации проекта пакет собирается под net10.0.
Beer-Ware License (Revision 42). Подробности в LICENSE.