RabbitMQ com MediatR e RawRabbit no .NET Core 3.1

Esse é um exemplo básico de controle e comunicação com RabbitMQ utilizando o package RawRabbit e MediatR no .NET Core 3.1, mas antes vou explicar um pouco sobre cada um.

MediatR

O package MediatR foi criado por Jimmy Bogart (Mesmo criador do package Automapper) que permite processar solicitações em memória (Commands) e notificações (Events). Com ele é possível trabalhar com o conceito CQS (separação de comandos que alteram o estado e consultas que não alteram o estado, criado por Bertrand Meyer).

Ele nos ajudará a mediar as mensagens recebidas e enviadas para o RabbitMQ para que sejam processadas de forma assíncrona.

Mais detalhes: https://github.com/jbogard/MediatR/wiki

RawRabbit

A escolha de um barramento de serviço que atenda aos nossos requisitos é uma parte crucial no desenvolvimento de um sistema distribuído. Neste exemplo utilizaremos o RabbitMQ como serviço (será necessário criar uma conta gratuita em https://www.cloudamqp.com).

O package RawRabbit é a abstração mais simples para trabalhar com o RabbitMQ, com ele fica muito fácil configurar e consumir um barramento AMQP. Neste exemplo utilizaremos a versão 2.0.0-rc5

Mais detalhes: https://github.com/pardahlman/RawRabbit/tree/2.0/docs

Agenda

  1. Criação da conta RabbitMQ no CloudAMQP
  2. Configuração do CloudAMQP no projeto WebApiSender e WebApiConsumer com o package RawRabbit
  3. Exemplo de utilização

1.1 — Abra o site CloudAMQP (https://www.cloudamqp.com) e clique em Sign Up

1.2 — Entre com seu e-mail ou conecte-se com sua conta Google ou Github

1.3 — Com sua conta criada, clique em Create New Instance

1.4 — Inclua o nome da sua instância, selecione o plano Little Lemur(Free) e cliquem em Select Region

1.5 — Selecione o Data Center SA-East-1 (São Paulo) e clique em Review

1.6 — Por fim, clique em Create Instance

2.1 — Baixe a solução (link no final deste post) e configure o appsetting.json do projeto Api.Sample.WebApiSender e Api.Sample.WebApiConsumer:

2.2 — Todas informações com “xxxxxx” você encontra no painel de gerenciamento do CloudAMQP criado:

3.1 — Configure a solução para iniciar as duas APIs ao executar (Clique com o botão direito na solução do Visual Studio e selecione Properties):

3.2 — Ao executar a solução, é possível acompanhar o funcionamento das duas APIs com o package Serilog configurado

Na solução de exemplo, o projeto Api.Sample.WebApiSender envia uma mensagem com o texto “OK” para o RabbitMQ que encaminha para quem estiver escutando o evento SampleCreatedEvent, esta configuração é feita no arquivo BusSubscriber.cs onde é feito o subscribe do evento que é definido como Topic, conforme código abaixo:

A classe criada com o MediatR que escuta o evento SampleCreatedEvent é:

E quem envia a mensagem é a Controller Sender:

Para testar o exemplo basta executar a controller sender, que simplesmente envia uma mensagem do tipo SampleCreatedEvent para o RabbitMQ

Repare que no projeto Consumer é apresentado a mensagem “SampleCreated = OK” funcionando conforme o esperado.

O exemplo final do código e com mais detalhes você confere aqui: https://github.com/hgmauri/sample-rawrabbit-mediatr

Deixe uma resposta