DEV Community

Cover image for Brighter + RabbitMQ: Como configurar Brighter com RabbitMQ
Rafael Andrade
Rafael Andrade

Posted on • Edited on

Brighter + RabbitMQ: Como configurar Brighter com RabbitMQ

Introdução ao RabbitMQ

O RabbitMQ é um dos brokers de mensagens mais utilizados, implementando o Advanced Message Queuing Protocol (AMQP) para garantir entrega confiável de mensagens. Desenvolvido na linguagem Erlang, oferece alta escalabilidade e tolerância a falhas, sendo ideal para sistemas distribuídos. O RabbitMQ age como intermediário que aceita mensagens de produtores e as entrega a consumidores, desacoplando serviços em arquiteturas de microserviços.

Requisitos

Recapitulação do Brighter

Antes de configurar o RabbitMQ, vamos revisar conceitos básicos do Brighter:

Mensagens (Comandos/Eventos)

Defina mensagens usando IRequest:

public class Greeting : Event(Guid.NewGuid())
{
    public string Name { get; set; } = string.Empty;
}
Enter fullscreen mode Exit fullscreen mode
  • Comandos: Operações direcionadas a um único destinatário (ex: SendEmail).
  • Eventos: Notificações broadcast (ex: OrderShipped).

Mapeador de Mensagens

Converte entre mensagens do Brighter e objetos da aplicação:

public class GreetingMapper : IAmAMessageMapper<Greeting>
{
    public Message MapToMessage(Greeting request)
    {
        var header = new MessageHeader
        {
            Id = request.Id,
            TimeStamp = DateTime.UtcNow,
            Topic = "greeting.topic",
            MessageType = MessageType.MT_EVENT
        };

        var body = new MessageBody(JsonSerializer.Serialize(request));
        return new Message(header, body);
    }

    public Greeting MapToRequest(Message message)
    {
        return JsonSerializer.Deserialize<Greeting>(message.Body.Bytes)!;
    }
}
Enter fullscreen mode Exit fullscreen mode

Manipulador de Requisições(Request Handler)

Processa as mensagens recebidas:

public class GreetingHandler(ILogger<GreetingHandler> logger) : RequestHandler<Greeting>
{
    public override Greeting Handle(Greeting command)
    {
        logger.LogInformation("Olá, {Name}!", command.Name);
        return base.Handle(command);
    }
}
Enter fullscreen mode Exit fullscreen mode

Configuração do Brighter com RabbitMQ

1. Configuração da Conexão

Defina os detalhes de conexão com o RabbitMQ:

var connection = new RmqMessagingGatewayConnection
{
    AmpqUri = new AmqpUriSpecification(new Uri("amqp://guest:guest@localhost:5672")),
    Exchange = new Exchange("paramore.brighter.exchange"),
};
Enter fullscreen mode Exit fullscreen mode

2. Inscrição no RabbitMQ

Inscreva-se em uma fila/tópico:

.AddServiceActivator(opt =>
{
    opt.Subscriptions = [
        new RmqSubscription<Greeting>(
            new SubscriptionName("kafka.greeting.subscription"),
            new ChannelName("greeting.queue"),
            new RoutingKey("greeting.topic"),
            makeChannels: OnMissingChannel.Create
        ),
    ];

    opt.ChannelFactory = new ChannelFactory(
        new RmqMessageConsumerFactory(connection)
    );
})
Enter fullscreen mode Exit fullscreen mode

3. Configuração do Produtor RabbitMQ

Publique eventos em um tópico:

.UseExternalBus(new RmqProducerRegistryFactory(connection, new[]
{
    new RmqPublication
    {
        Topic = new RoutingKey("greeting.topic"),
        MakeChannels = OnMissingChannel.Create
    }
}).Create());
Enter fullscreen mode Exit fullscreen mode

Melhores Práticas

  • Filas de Cartas Mortas(DLQ): Configure DLQs no RabbitMQ para tratar mensagens problemáticas. Use deadLetterChannelName e deadLetterRoutingKey nas declarações de filas.
  • Monitoramento: Utilize o plugin de gerenciamento do RabbitMQ para acompanhar saúde e desempenho das filas.
  • Tratamento de Erros: Implemente retentativas e circuit breakers para falhas transitórias (o Brighter suporta isso via atributos, abordarei em outro artigo).

Conclusão

A integração do Brighter com o RabbitMQ permite construir sistemas de mensageria robustos e escaláveis em aplicações .NET. Ao combinar o protocolo AMQP do RabbitMQ com a camada de abstração do Brighter, você pode:

  • Desacoplar serviços com padrões de publish-subscribe.
  • Garantir ordenação e confiabilidade nas mensagens.
  • Simplificar o tratamento de erros com DLQs e retentativas.

Para uso em produção, valide as configurações contra a documentação mais recente do Brighter, pois recursos como priorização de mensagens ou exchanges com atraso podem evoluir.

Referências

Top comments (0)