Pular para o conteúdo principal

mensageria


id: mensageria title: Mensageria description: Mensageria

Mensageria

Mensageria é o conjunto de tecnologias e práticas que permite a troca de mensagens entre sistemas, aplicações ou dispositivos, geralmente de forma assíncrona (ou seja, sem a necessidade de que ambos estejam conectados ao mesmo tempo).

Mensageria é como um correio digital entre diferentes partes de um sistema. Em vez de uma aplicação "chamar" diretamente outra (como numa API), ela envia uma mensagem para uma fila, e a outra aplicação pode pegar essa mensagem mais tarde, quando estiver pronta.

Queues (Filas): São as caixas postais internas do sistema de mensageria, onde as mensagens enviadas pelos produtores são armazenadas até que sejam consumidas. As filas funcionam como buffers, ou seja, áreas de armazenamento temporário que podem reter mensagens até que os consumidores estejam prontos para processá-las. Isso permite que produtores e consumidores operem a diferentes velocidades ou em momentos diferentes, proporcionando flexibilidade e resiliência ao sistema.

Exemplos comuns de mensageria:

  • Fila de mensagens (Message Queue): como o RabbitMQ, Apache Kafka, Amazon SQS.
  • Publicação/Assinatura (Pub/Sub): como no Google Pub/Sub, onde uma aplicação publica uma mensagem e outras que assinam esse tipo de mensagem a recebem.

Por que usar mensageria?

  • Desacoplamento: os sistemas não precisam estar diretamente conectados.
  • Escalabilidade: permite lidar com picos de carga com mais facilidade.
  • Resiliência: se um serviço estiver fora do ar, a mensagem pode ficar na fila até que ele volte.
  • Distribuição: facilita comunicação entre sistemas distribuídos (como microserviços).

Exemplo no mundo real:

Imagine um site de e-commerce:

  1. O cliente faz um pedido.
  2. O sistema envia uma mensagem com os dados do pedido para uma fila.
  3. Um serviço de pagamento pega a mensagem da fila e processa o pagamento.
  4. Outro serviço pega a mesma mensagem (ou outra) e atualiza o estoque.
  • A forma padrão de se distribuir mensagens é round-robin

RabbitMQ

O RabbitMQ é um sistema de mensageria, open-source, que lida com as mensagens, ou dados enviados entre os sistemas, em uma fila - daí que surge seu nome: MQ é uma abreviação para Message Queue, ou Fila de Mensagens.

o RabbitMQ atua como um broker, um agenciador, ou seja, um sistema de recebimento, armazenamento e entrega de mensagens. Essas mensagens são publicadas no seu sistema a partir de um produtor, e consumida através de inscrições, pelos consumidores - criando um sistema chamado de pub/sub, ou publisher/subscriber, onde as fontes de dados atuam como publicadores, e os consumidores de dados atuam como inscritos.

CaracterísticaFila (Queue)Pub/Sub (Publisher/Subscriber)
Modelo de entregaUm para umUm para muitos
Produtor envia para...Uma filaUm tópico
Consumidores recebem...Cada mensagem vai para um consumidorTodos os inscritos recebem a mensagem
Ordem das mensagensPode ser garantidaPode ser garantida ou não (depende do broker)
Acesso à mensagemApós o consumo, a mensagem é removidaMensagem é entregue a todos os inscritos
Uso típicoProcessamento de tarefas, workflowsNotificações, eventos, broadcast
EscalabilidadeEscala por dividir carga entre consumidoresEscala por adicionar mais subscribers
Exemplos de usoEnviar e-mails, gerar PDFsLogs, atualizações em tempo real, alertas
Exemplos de brokersRabbitMQ, AWS SQS, ActiveMQKafka, Google Pub/Sub, Redis Pub/Sub, RabbitMQ

AMPQ

Advanced Message Queue Protocol - Esse protocolo dita a forma de comunicação de todo o sistema do RabbitMQ, desde os componentes da sua estrutura, até a forma como as mensagens são levadas da origem ao respectivo destino.

Observação: o RabbitMq também aceita outros protocolos, como MQTT, STOMP.

No RabbitMQ, a mensagem segue o seguinte fluxo:

  1. O publisher envia a mensagem para um exchange, que atua como um roteador ou gateway.
  2. O exchange direciona a mensagem para uma ou mais filas (queues) com base em regras de roteamento chamadas de bindings.
  3. As filas armazenam temporariamente as mensagens, podendo ser:
    • Duráveis: armazenadas em disco (persistência garantida)
    • Transientes: armazenadas apenas em memória (sem persistência)
  4. Por fim, os consumidores acessam essas filas e processam as mensagens.

Esse modelo permite o desacoplamento entre produtor e consumidor, garantindo escalabilidade, confiabilidade e tolerância a falhas, características valorizadas em sistemas críticos e de alto desempenho, como os usados em órgãos públicos e tribunais.

🎯 Pontos relevantes para concursos (Cebraspe):

  • AMQP é um protocolo de nível de aplicação usado para comunicação entre aplicações via troca de mensagens.
  • Exchange no RabbitMQ pode operar em diferentes modos: direct, topic, fanout, headers.
  • Bindings determinam as regras de roteamento entre exchange e fila.
  • A durabilidade da fila ou da mensagem afeta a garantia de entrega em caso de falhas.
  • RabbitMQ é uma implementação popular do AMQP e pode operar com múltiplas filas e consumidores de forma assíncrona e distribuída.