À medida que as aplicações crescem, torna‑se cada vez mais difícil fazer todos os serviços comunicarem entre si sem criar dependências rígidas. Chamadas diretas entre serviços criam acoplamento, aumentam o tempo de resposta e tornam o sistema frágil.
Uma alternativa muito mais limpa é usar eventos. Estes eventos são criados e comunicados a um “gestor de eventos”, que deve enviar para cada um dos canais que devem processar cada um dos eventos.
Em vez de um serviço chamar outro diretamente, ele simplesmente publica um evento como:
- “PedidoCriado”
- “PagamentoConfirmado”
- “UtilizadorRegistado”
E qualquer serviço ou canal interessado nesse evento reage. Sem dependências diretas. Sem bloqueios. Sem esperar respostas. Estes eventos são processados de forma completamente assíncrona e independente.
Para entendermos isto um pouco melhor, vamos criar um exemplo em C#. Para tal primeiro temos que escolher o “coração” e o gestor de eventos. Para este caso vamos optar por RabbitMQ.
O RabbitMQ é um message broker baseado em AMQP que funciona como um “correio inteligente” entre serviços: ele recebe mensagens, encaminha‑as através de exchanges e filas, aplica regras de routing (direct, topic, fanout, headers) e garante entrega fiável mesmo quando algum serviço está offline. Na prática, ele desacopla produtores e consumidores, permitindo que cada parte do sistema comunique de forma assíncrona, escalável e resiliente, sem depender de chamadas diretas. É simples de usar, poderoso por baixo do capô e perfeito para arquiteturas orientadas a eventos. O RabbitMQ é um sistema independente e para nos ligarmos a este vamos uma usar uma biblioteca chamada MassTransit.
O MassTransit é um framework de messaging para .NET que simplifica toda a integração com brokers como RabbitMQ, Azure Service Bus ou Kafka. Ele trata automaticamente da criação de filas, bindings, serialização, políticas de retry, dead‑lettering e descoberta de consumidores, deixando‑te focar apenas na lógica do teu domínio. Na prática, funciona como uma camada elegante por cima do AMQP (ou outros protocolos), oferecendo convenções inteligentes, configuração mínima e um modelo de programação limpo baseado em mensagens e consumidores. É leve, moderno e torna muito mais fácil construir sistemas assíncronos e orientados a eventos em C#.
Portanto, para este exemplo de event-driven funcionar, precisamos de duas peças muito importantes:
- RabbitMQ → o “correio” que recebe e entrega mensagens
- MassTransit → a biblioteca que facilita o envio e consumo de mensagens em C#
Vamos ver como tudo se encaixa.
🐇 Instalar o RabbitMQ
Para instalar o RabbitMQ no Windows, precisas primeiro do Erlang, já que o RabbitMQ corre em cima da VM do Erlang. Depois instalas o RabbitMQ e ativas o painel de gestão. Aqui vai o processo explicado de forma simples e com os comandos essenciais. Segue este guia mais detalhado se ficarem dúvidas.
1. Instalar o Erlang
- Faz download da versão suportada no site oficial do Erlang.
- Instala normalmente (como administrador).
- Adiciona o binário ao PATH:
C:\Program Files\Erlang OTP\erl-26.2\bin
Isto garante que o RabbitMQ consegue encontrar o erl.exe.
2. Instalar o RabbitMQ
- Faz download do instalador oficial do RabbitMQ para Windows.
- Instala como administrador — o instalador cria automaticamente o serviço Windows.
Para verificar o estado do serviço:
rabbitmqctl status
Se tudo estiver correto, verás informação sobre o broker e o runtime Erlang.
3. Ativar o Management Plugin
O painel web do RabbitMQ não vem ativo por defeito. Para o ativar:
rabbitmq-plugins enable rabbitmq_management
Depois reinicia o serviço:
net stop RabbitMQ
net start RabbitMQ
4. Aceder ao Painel Web
Abre o browser e entra em:
http://localhost:15672
Credenciais padrão:
- User: guest
- Password: guest
Depois podemos mudar o user e a pass, mas para este exemplo é mais que perfeito a configuração padrão. Na verdade, o rabbitmq, por ser independente, funciona para qualquer linguagem de programação. A configuração será sempre esta mesma.
Agora só falta instalar o nuget do Masstransit e configurar a ligação ao RabbitMQ. Ddpois disso já podemos registar e subscrever a eventos. Deixaremos o mass transit o exemplo para o próximo post que podes consultar aqui.