DEV Community

Juarez Júnior for Develop4Us

Posted on • Edited on

Integração de Microsserviços e Processamento de Mensagens com MassTransit e RabbitMQ

O MassTransit é uma biblioteca leve para processamento de mensagens em .NET. Ele facilita a implementação de comunicação assíncrona entre microsserviços, oferecendo suporte para diversas tecnologias de mensageria, como RabbitMQ, Azure Service Bus e outras. Com o MassTransit, é possível configurar produtores e consumidores de mensagens de forma simples e eficiente, permitindo que os microsserviços se comuniquem de maneira desacoplada. Neste exemplo, vamos demonstrar como configurar o MassTransit para se comunicar com o RabbitMQ.

Bibliotecas:

Para usar a biblioteca MassTransit e conectar-se ao RabbitMQ, instale os seguintes pacotes NuGet no seu projeto. Certifique-se de que o RabbitMQ está instalado e em execução.

Install-Package MassTransit
Install-Package MassTransit.RabbitMQ
Enter fullscreen mode Exit fullscreen mode

Código de Exemplo:

using MassTransit;
using System;
using System.Threading.Tasks;

namespace MassTransitExemplo
{
    // Definindo a mensagem
    public class PedidoCriado
    {
        public string Id { get; set; }
        public DateTime Data { get; set; }
    }

    // Definindo o consumidor da mensagem
    public class PedidoCriadoConsumer : IConsumer<PedidoCriado>
    {
        public Task Consume(ConsumeContext<PedidoCriado> context)
        {
            Console.WriteLine($"Pedido recebido: {context.Message.Id} em {context.Message.Data}");
            return Task.CompletedTask;
        }
    }

    class Program
    {
        static async Task Main(string[] args)
        {
            // Configurando o MassTransit com RabbitMQ
            var busControl = Bus.Factory.CreateUsingRabbitMq(cfg =>
            {
                cfg.Host("rabbitmq://localhost", h =>
                {
                    h.Username("guest");
                    h.Password("guest");
                });

                // Configurando o consumidor
                cfg.ReceiveEndpoint("pedido_queue", e =>
                {
                    e.Consumer<PedidoCriadoConsumer>();
                });
            });

            // Iniciando o bus
            await busControl.StartAsync();

            try
            {
                // Publicando uma mensagem
                var pedido = new PedidoCriado { Id = Guid.NewGuid().ToString(), Data = DateTime.Now };
                await busControl.Publish(pedido);

                Console.WriteLine("Pedido publicado.");
                Console.ReadLine();
            }
            finally
            {
                await busControl.StopAsync();
            }
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Explicação do Código:

Neste exemplo, configuramos o MassTransit para trabalhar com o RabbitMQ. Criamos uma mensagem chamada PedidoCriado que contém as propriedades Id e Data. Em seguida, definimos um consumidor de mensagens chamado PedidoCriadoConsumer, que processa mensagens do tipo PedidoCriado. O Bus.Factory.CreateUsingRabbitMq é usado para configurar o RabbitMQ, especificando o host e as credenciais. No método Main, o busControl é iniciado, e uma mensagem de PedidoCriado é publicada. O consumidor captura essa mensagem e imprime seus detalhes no console.

Conclusão:

O MassTransit simplifica a comunicação entre microsserviços, facilitando o processamento de mensagens assíncronas com RabbitMQ e outros serviços de mensageria. Ele abstrai a complexidade do gerenciamento de filas e tópicos, permitindo que os desenvolvedores foquem na lógica de negócios.

Código fonte: GitHub

AWS Security LIVE!

Tune in for AWS Security LIVE!

Join AWS Security LIVE! for expert insights and actionable tips to protect your organization and keep security teams prepared.

Learn More

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay