Tech Writers

RabbitMQ Simulator: Uma ferramenta útil para planejar sistemas de mensageria

6 minutos

A necessidade de criar softwares mais resilientes e desacoplados tem impulsionado a adoção da mensageria, um padrão de comunicação onde diferentes aplicações ou partes do sistema “conversam” entre si através de mensagens, de maneira assíncrona e sem perder as informações durante o processo¹.

Um dos protocolos mais utilizados para isso é o AMQP 0-9-1 (Advanced Message Queuing Protocol) e é baseada em quatro elementos: produtor, exchange, fila e consumidor².

Cada um deles desempenha um papel essencial no fluxo de mensagens:

  • Produtor: é a aplicação — ou parte de um sistema — que origina a comunicação e envia as mensagens. Ele é responsável por publicar as informações na exchange, sem se preocupar com quem irá recebê-las.
  • Exchange: atua como um roteador de mensagens, recebendo-as do produtor e direcionando-as para uma ou mais filas, de acordo com o seu tipo (Fanout, Topic, Direct ou Headers).
  • Fila: é o repositório temporário onde as mensagens ficam armazenadas até serem consumidas. Pode existir uma ou várias filas, dependendo da arquitetura do sistema.
  • Consumidor: é a aplicação que recebe e processa as mensagens provenientes da fila, completando o ciclo de comunicação.

O conjunto desses componentes permite estabelecer uma comunicação assíncrona entre diferentes partes de um sistema, sem que seja necessário conhecer os detalhes da implementação de cada uma.

Com isso, muitas ferramentas surgiram para implementar essa arquitetura, e uma das mais populares é o RabbitMQ. Simular o funcionamento dessa comunicação de maneira visual pode auxiliar planejamento adequado de soluções, de forma que atenda às necessidades do cliente.

Para isso, há uma página na internet chamada “RabbitMQ Simulator”, que, como o nome diz, simula o funcionamento da mensageria entre diferentes aplicações. Nesse artigo você verá um passo a passo de como simular essa comunicação e utilizá-la em seus projetos e/ou estudos.

Passos para usar o RabbitMQ Simulator:

  1. Entrar na página: https://tryrabbitmq.com/;
  2. Criar o produtor:

A página mostra um quadrado branco onde ocorrerá a simulação e os elementos que compõem a arquitetura em ícones no lado esquerdo.
Arrastar o ícone “producer” até o centro e observar o círculo que o representa. Podem ser criados mais de um produtor. Para editar o nome é só alterar o texto onde a seta vermelha está apontando na imagem. Vamos criar dois produtores: “Produtor 1” e “Produtor 2”.

Imagem 1 – Adicionando dois produtores à simulação

3. Criar o Consumidor

Arrastar o ícone “consumer” até o centro e aparecerá o ícone amarelo. Podem ser criados mais de um consumidor. Para editar o nome é só alterar o texto onde a seta vermelha está apontando na imagem. Vamos criar dois consumidores: “Consumidor 1” e “Consumidor 2”.

Imagem 2 – Adicionando dois consumidores à simulação

4. Criar a fila

A fila é um elemento importante nessa arquitetura. É onde as mensagens serão postadas para serem enviadas aos consumidores. Para criar é só clicar no ícone azul. É possível editar o nome da fila, onde mostra a seta vermelha na imagem seguinte. Percebe que há um contador de mensagens acima do ícone ‘msg:0’? Ele representa o número de mensagens represadas em cada fila – ou seja, aquelas que ainda não foram processadas pelos consumidores.

Se as mensagens não forem consumidas, esse número pode crescer infinitamente, como uma caixa de entrada lotada. Isso impacta a performance do sistema, pois as filas consomem memória e, em casos extremos, podem até esgotar os recursos do servidor. Por isso, em sistemas reais, é comum configurar limites de tamanho para as filas ou políticas para descartar mensagens antigas.

Imagem 3 – Adicionando a fila à simulação

5. Criar Exchange

Como vimos, a exchange é o elemento que está entre o produtor e a fila e define como as mensagens serão distribuídas entre as filas, e que suporta diferentes tipos de exchanges, cada uma com regras de roteamento específicas. A seguir, vamos explorar os tipos Fanout, Topic e Direct.

5.1)  Fanout

A exchange do tipo fanout envia a mensagem recebida para todas as filas. Pode ser aplicada em sistemas onde todos os interessados devem receber todas as mensagens.

Para criar uma exchange é só arrastar o ícone que a representa para o centro do quadrado. É possível escolher o nome e o seu tipo. Nesse primeiro exemplo, será do tipo Fanout.

Imagem 4 – Criando uma exchange do tipo fanout

É necessário fazer a união entre consumidor, fila, exchange e produtor. Para isso, manter a tecla Alt ativada e arraste o mouse do consumidor para a fila, depois da fila para a exchange e do produtor para a exchange. Surgirão setas que representam a ligação desses elementos, como podemos ver na imagem abaixo. Mais uma fila foi criada para melhor representar nosso exemplo, e cada fila foi associada a um consumidor.

Para disparar um exemplo de mensagem é só clicar em “Produtor 1”, ir até “New Message” e definir o corpo da mensagem, sua “routing key” e o intervalo de tempo em segundos para que seja enviada. Podemos observar, que nossa exchange do tipo Fanout distribui a mensagem para todas as filas.

Imagem 5 – Disparando mensagem

5.2) Topic

A do tipo topic usa um sistema de roteamento baseado em duas chaves: (i) “routing keys”, uma configuração anexada à mensagem pelo produtor, que funciona como um “endereço da mensagem” e é identificada pela exchange; e (ii) “Binding keys” que são configuradas na fila ao vinculá-la à exchange, são como filtros nas que ajudam a direcionar o envio das mensagens para as respectivas filas.

Para simular esse tipo, clicamos na exchange que criamos e alteramos seu nome para “Exchange topic”, o que vai exigir a configuração das “binding keys”. Ao clicar em cima das setas com o termo “binding key”, podemos alterá-la para o nome que nos interessar.
Seguindo nosso exemplo, uma fila será criada para receber mensagens com chave “produc.log” que alimenta o sistema de logística do nosso cliente e a outra “produc.fin” para enviar dados ao time de financeiro do cliente. Ao clicarmos no Produtor 1, configuramos a nova mensagem com routing key “product.log”. Observem que a exchange só envia para a fila correspondente.

Imagem 6 – Mensagem indo para a fila correspondente (product.log)

Agora, se configurarmos o Produtor 2 para enviar mensagens com “routing key” “product.fin”, e trocamos a “binding key” da fila 1 para “product.*” veremos que a mensagem irá para todas as filas que comecem com o termo “product.”.

Imagem 7 – Mensagem indo para todas as filas que começam com ”product.”

5.3) Direct

Por fim, a exchange do tipo direct direciona a mensagem apenas para uma ou mais filas que estejam vinculadas por uma “routing key” específica. Aqui a correspondência deve ser exata. E é adotada em sistemas em que a mensagem é direcionada a consumidores específicos. Seguindo o exemplo anterior, se o Produtor 2 envia uma mensagem com “routing key” product.log, apenas a fila com essa “binding key” a receberá.

Imagem 8 – Criando uma exchange do tipo direct

Ao permitir o desenho de modelos de mensageria para diferentes configurações, o RabbitMQ Simulator se torna uma ferramenta útil para auxiliar desenvolvedores e arquitetos de software no desenho de sistemas baseados nesse padrão de comunicação. Por fim, sua forma didática de apresentar os elementos do protocolo AMQP 0-9-1 pode auxiliar nos estudos daqueles que querem conhecer mais sobre essa tecnologia. Neste artigo, os exemplos citados foram apenas para apresentar esse simulador, mas que sirva como um convite para que outros desenvolvedores explorem essa ferramenta em seus projetos.

Fontes:

¹Development of a message broker. Giovanni Henrique Silva Oliveira. Universidade de Coimbra, 2021. https://transportersystems.com/docs/dissertacao-giovanni-oliveira.pdf

²AMQP 0-9-1 Model Explained. Documentação RabbitMQ. Broadcom, 2025. https://www.rabbitmq.com/tutorials/amqp-concepts

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *