Se você está trabalhando com aplicações em escala ou distribuídas, você provavelmente já se deparou com o conceito de mensageria. Em resumo, um sistema de mensagens permite que as aplicações trabalhem juntas, mas permaneçam desacopladas. É um modelo de comunicação assíncrona que é especialmente útil para comunicação entre microserviços.
Neste artigo, vamos introduzir o MassTransit, uma biblioteca de mensagens de código aberto para .NET que pode ser usada em conjunto com RabbitMQ e ASP.NET Core API para criar sistemas robustos e escaláveis.
O que é Mensageria?
Mensageria é uma maneira de permitir a comunicação entre diferentes sistemas ou componentes de software de forma desacoplada. Essa comunicação é realizada principalmente através do envio de mensagens – pacotes de dados que contêm informações. Em vez de se comunicarem diretamente uns com os outros, os componentes do software enviam mensagens para uma fila, e outros componentes podem então pegar essas mensagens e processá-las.
A vantagem deste modelo é que permite a comunicação assíncrona entre os componentes. Ou seja, um componente pode enviar uma mensagem e continuar com seu trabalho, sem precisar esperar que o receptor processe a mensagem. Isso é útil para operações que podem levar muito tempo, como requisições via rede ou acesso ao banco de dados.
Conhecendo o MassTransit
Agora que entendemos o conceito de mensageria”, vamos falar sobre o MassTransit. Esta é uma biblioteca de mensagens para .NET, que oferece uma interface simplificada e integrada para lidar com sistemas de mensagens.
O MassTransit fornece uma camada de abstração sobre os sistemas de mensagens subjacentes, como o RabbitMQ. Isso significa que você pode trabalhar com objetos e métodos de alto nível em seu código, sem precisar se preocupar com os detalhes de baixo nível do sistema de mensagens. Ele também tem suporte a Azure Service Bus e Amazon SQS.
Isso acaba resultando em um uso mais simples e prático do que utilizando bibliotecas como o RabbitMQ.Client. Porém, é importante entender que quando utilizamos uma biblioteca como o MassTransit, estamos sujeitos a convenções aplicadas pela mesma, e que acabamos tendo menos controle como se tivéssemos com outros bibliotecas.
Um dos principais benefícios do MassTransit é que ele oferece recursos avançados, como suporte para mensagens de publish/subscribe, envio de mensagens atrasadas, e a capacidade de criar pipelines de mensagens. Além disso, o MassTransit tem suporte embutido para transações, de modo que você pode garantir que as mensagens sejam entregues e processadas de forma confiável.
Integrando MassTransit, RabbitMQ e ASP.NET Core
O primeiro passo é garantir que o RabbitMQ esteja sendo executado em sua máquina. O ideal é que seja utilizando o Docker, pela portabilidade e facilidade de criar e apagar instâncias de containers de serviços. O código abaixo mostra como iniciar um container Docker do RabbitMQ e sua interface de gerenciamento.
docker run -p 15672:15672 -p 5672:5672 masstransit/rabbitmq
Nesse caso utilizamos a imagem do RabbitMQ que é mantida pelo próprio time do MassTransit, que contém a interface de gerenciamento já ativada e também recursos adicionais.
Vamos agora para o projeto ASP.NET Core API. Começamos pela instalação dos pacotes NuGet necessários, os quais coloco abaixo:
MassTransit.RabbitMQ
MassTransit.Extensions.DependencyInjection
Com isso, vamos criar uma classe que vai ser utilizada para armazenar dados de evento de compra fictícia.
Já que temos a classe de evento e os pacotes relacionados ao MassTransit instalados, podemos criar nossa classe responsável pelo consumo dessas informações. Para isso, basta herdar de IConsumer<T>, onde T é o tipo da mensagem a ser recebida.
Com a parte de consumo implementada, vamos para a parte de publicação. Veja como é simples utilizar a interface IBus do MassTransit para publicar uma mensagem a partir de uma Action de nosso Controller.
Finalmente, concluímos nosso tutorial com a configuração na classe Program, especificando os consumidores.
Com isso feito, conseguimos realizar uma requisição em nosso endpoint da API, e uma mensagem é publicada e consumida com sucesso através do RabbitMQ.
Quer acelerar seus resultados?
Além de trabalhar para o exterior como Desenvolvedor .NET Sênior, eu sou instrutor e mentor de centenas de desenvolvedores .NET que querem acelerar seus resultados e se destacar em suas carreiras.
O meu treinamento Imersão .NET Expert é uma assinatura com mais de 800 videoaulas e 200 horas de cursos focados em profissionais .NET Plenos e Seniores.
Entre os temas de cursos estão Microsserviços, DevOps, Performance, APIs, entre outros tantos.
Está com R$1.000 de desconto, e você pode conhecer mais e garantir sua vaga clicando aqui.
Conclusão
Em suma, o MassTransit, em conjunto com o RabbitMQ e o ASP.NET Core, oferece uma abordagem poderosa e flexível para a construção de sistemas baseados em mensagens. Ele permite que você crie aplicações desacopladas, escaláveis e resilientes, aproveitando ao máximo os benefícios da comunicação assíncrona.
No entanto, como sempre, é importante lembrar que cada ferramenta tem seus pontos fortes e fracos, e é essencial entender suas necessidades e requisitos específicos antes de tomar uma decisão. O MassTransit é uma solução poderosa e rica em recursos, mas, dependendo do caso, outras opções podem ser mais adequadas.
Nós cobrimos apenas a superfície do que é possível fazer com o MassTransit, RabbitMQ e ASP.NET Core. Espero que este artigo tenha fornecido uma introdução útil a essas tecnologias e estimulado seu interesse em aprender mais.
Vamos que vamos!