Skip to content

EBCEYS/RabbitMq

Repository files navigation

Ebceys.RabbitMq

Легковесная .NET-библиотека для интеграции с RabbitMQ через готовые building blocks:

  • Publisher для отправки сообщений
  • Client для request/response (RPC-подобный сценарий)
  • ControllerServer для обработки входящих сообщений через контроллеры и middleware

Библиотека ориентирована на использование через IHostedService и IServiceCollection.

Установка

dotnet add package Ebceys.RabbitMq

Что внутри

  • Fluent-конфигурация через RabbitMQConfigurationBuilder
  • Готовые дефолтные реализации:
    • DefaultRabbitMqClient
    • DefaultRabbitMqControllerServer
    • DefaultJsonSerializer
  • Расширения для 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.md
  • docs/modules/configuration.md
  • docs/modules/controllers.md
  • docs/modules/dependency-injection.md
  • docs/modules/serializers.md
  • docs/modules/server.md

API и карта исходников

  • docs/api/public-api.md
  • docs/api/production-source-map.md

Совместимость

По текущей конфигурации проекта пакет собирается под net10.0.

License

Beer-Ware License (Revision 42). Подробности в LICENSE.

About

Библиотека для работы с RabbitMq на dotnet 10.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages