Mensageria: Compreendendo a Comunicação Assíncrona 📬🕒

Gizelly Silva
5 min readMay 27, 2024

--

Mensageria é muito mais do que um jargão técnico. É uma ferramenta poderosa que revoluciona a forma como sistemas interagem e se comunicam entre si. Imagine uma rede complexa de sistemas distribuídos, cada um com sua própria tarefa e responsabilidade. Como garantir uma troca eficiente e confiável de informações entre eles? A resposta está na mensageria, pronta para facilitar essa interação.

Neste artigo, vamos explorar a fundo o conceito de mensageria. Vamos entender como ela permite a comunicação assíncrona entre diferentes partes de uma aplicação, proporcionando flexibilidade, escalabilidade e resiliência. Prepare-se para desvendar os segredos por trás dessa ferramenta fundamental no arsenal de qualquer desenvolvedor. 👨🏻‍💻✨

O que é a Mensageria?

Mensageria é uma maneira de fazer diferentes partes de um sistema trocarem informações de forma assíncrona, sem precisar esperar uma pela outra, as mensagens são enviadas e recebidas de forma independente. Isso torna a comunicação mais flexível e resistente a falhas, ideal para sistemas grandes e distribuídos.

Componentes Fundamentais

Para entender bem como a mensageria funciona, é importante conhecer os componentes principais:

  1. Producer: É quem envia as mensagens. Pode ser uma aplicação, serviço ou qualquer parte do sistema que precisa comunicar algo a outro componente.
  2. Consumer: É quem recebe as mensagens. Também pode ser uma aplicação, serviço ou parte do sistema que precisa processar a mensagem recebida.
  3. Message Broker: É o correio central que gerencia as mensagens. Ele recebe, organiza, armazena e entrega as mensagens para os consumidores quando eles estão prontos para recebê-las.

Tipos de Comunicação

Existem dois tipos principais de comunicação na mensageria:

  1. Point-to-Point (Ponto a Ponto): Nesse modelo, cada mensagem é enviada de um produtor para um único consumidor. É como enviar uma carta registrada que só o destinatário pode receber.
  2. Publish/Subscribe (Publicar/Assinar): Nesse modelo, um produtor envia uma mensagem para vários consumidores ao mesmo tempo. É como postar algo nas redes sociais, onde todos os seguidores recebem a atualização.

Como Funciona um Serviço de Mensageria?

Agora que você conhece os componentes e os tipos de comunicação, vamos ver como um serviço de mensageria funciona na prática:

Produção da Mensagem

  • Envio: Quando uma parte do sistema, chamada de produtor, tem uma mensagem para enviar, ela cria essa mensagem e a envia para o Message Broker. Por exemplo, pode ser um pedido de compra enviado por um sistema de e-commerce.
  • Formato da Mensagem: As mensagens geralmente têm um formato padronizado (JSON, XML, etc.) para garantir que todos os componentes possam entender seu conteúdo.

Gerenciamento pelo Message Broker

  • Recebimento: O Message Broker recebe a mensagem do produtor. Ele atua como intermediário, garantindo que a mensagem seja entregue corretamente.
  • Armazenamento: Se o consumidor ainda não está pronto para processar a mensagem, o Message Broker armazena a mensagem temporariamente. Ele mantém as mensagens em filas (para comunicação ponto a ponto) ou em tópicos (para comunicação publicar/assinar).
  • Distribuição: Quando o consumidor está pronto, o Message Broker entrega a mensagem. Ele pode fazer isso imediatamente ou depois, dependendo da disponibilidade do consumidor.

Consumo da Mensagem

  • Recepção: Quando o consumidor está pronto para processar a mensagem, ele solicita ao Message Broker para receber a mensagem.
  • Processamento: O consumidor então processa a mensagem. Isso pode significar atualizar um banco de dados, enviar um e-mail, ou qualquer outra ação que o sistema precise realizar.

Acknowledge (Reconhecimento)

  • Confirmação de Recebimento: Após processar a mensagem, o consumidor envia uma confirmação de recebimento (acknowledge) ao Message Broker. Isso indica que a mensagem foi recebida e processada com sucesso.
  • Remoção da Mensagem: Depois de receber a confirmação, o Message Broker pode remover a mensagem da fila ou do tópico, garantindo que não será processada novamente.

Resiliência e Escalabilidade

  • Resiliência: Se o consumidor estiver temporariamente indisponível, o Message Broker pode manter a mensagem até que o consumidor esteja pronto, garantindo que nenhuma mensagem seja perdida.
  • Escalabilidade: O sistema pode ser escalado facilmente adicionando mais produtores e consumidores, sem alterar a arquitetura do Message Broker. Isso permite lidar com grandes volumes de mensagens de forma eficiente.

Exemplo Prático em Java com Spring Boot usando o RabbitMQ

Para ilustrar como tudo isso funciona na prática, vamos configurar um serviço de mensageria usando RabbitMQ com Spring Boot. Este exemplo mostrará como configurar um produtor e um consumidor de mensagens.

Configuração Inicial
Primeiro, precisamos adicionar a dependência do RabbitMQ no arquivo pom.xml do seu projeto:

Configuração do RabbitMQ
Em seguida, configuramos o RabbitMQ no nosso projeto. Crie uma classe de configuração chamada RabbitConfig:

Produtor de Mensagens
Vamos criar uma classe responsável por publicar mensagens. Aqui está o código da classe BoardCreatedEventPublisher:

Consumidor de Mensagens
Vamos criar uma classe responsável por consumir as mensagens. Aqui está o código da classe BoardCreatedEventListener:

Chamando o Produtor de Mensagens
Finalmente, vamos integrar o código que chama a classe para publicar uma mensagem toda vez que um novo board é criado pelo usuário:

Neste exemplo, configuramos um sistema de mensageria utilizando o Message Broker RabbitMQ. Primeiramente, estabelecemos um exchange direto chamado board-exchange e uma fila chamada board-created-queue. Em seguida, definimos um binding que associa a fila board-created-queue ao exchange board-exchange, garantindo que as mensagens do tipo BoardCreatedEvent sejam corretamente roteadas para esta fila.

Embora não tenhamos abordado os detalhes sobre exchanges e bindings, são conceitos fundamentais em sistemas de mensageria. Eles definem as regras de roteamento das mensagens entre produtores e consumidores, garantindo sua entrega adequada.

No código do produtor, criamos uma classe chamada BoardCreatedEventPublisher, responsável por enviar mensagens para o exchange board-exchange usando o RabbitTemplate. Este template é uma ferramenta fornecida pelo Spring Boot para simplificar a publicação de mensagens em um exchange RabbitMQ.

Por outro lado, no código do consumidor, implementamos a classe BoardCreatedEventListener, que é anotada com @RabbitListener. Isso indica ao Spring Boot que esta classe é um consumidor de mensagens e deve ser notificada sempre que houver uma mensagem na fila board-created-queue. Ao receber uma mensagem, o método handleBoardCreatedEvent é invocado para processar a mensagem recebida.

Com isso, estabelecemos um fluxo de comunicação assíncrona entre os diferentes componentes do sistema, onde o produtor envia mensagens para o exchange e o consumidor as recebe da fila associada.

Conclusão

Exploramos neste artigo o poder da mensageria e sua capacidade de revolucionar a comunicação assíncrona entre sistemas distribuídos. Desde o estabelecimento de filas e troca de mensagens até a implementação de produtores e consumidores, vimos como a mensageria pode proporcionar flexibilidade, escalabilidade e resiliência aos nossos sistemas.

Fim 😗🖖🏻

Com isso, encerro por aqui e espero que este artigo tenha contribuído para o seu entendimento da mensageria e suas aplicações. Mantenha-se atualizado e explore os conceitos apresentados em seus próximos projetos.

— Você pode me seguir no LinkedIn e no Github também. 💖

--

--

Gizelly Silva

Desenvolvedora Frontend com mais de 7 anos de experiência, apaixonada por criar interfaces web intuitivas e cativantes que encantam os usuários.