Você conhece o RabbitMQ?

07/06/2024

Você conhece o RabbitMQ?

Desvendando os Conceitos Fundamentais do RabbitMQ para Sistemas  Distribuídos Eficientes - Grupo Taking

RabbitMQ é um software de código aberto que atua como um message broker, ou seja, um intermediário na comunicação entre diferentes aplicações ou serviços. Ele utiliza o protocolo AMQP (Advanced Message Queuing Protocol) para garantir a entrega confiável de mensagens em um ambiente distribuído.

Para que serve o RabbitMQ?

  1. Comunicação Assíncrona: Permite que os aplicativos se comuniquem de forma assíncrona, sem a necessidade de estarem online ao mesmo tempo. As mensagens são armazenadas em filas até que o destinatário esteja pronto para recebê-las.

  2. Desacoplamento de Serviços: Facilita a criação de arquiteturas de microsserviços, onde cada serviço pode se comunicar com outros serviços de forma independente, sem a necessidade de conhecer detalhes de implementação.

  3. Escalabilidade: Permite que os aplicativos escalem horizontalmente, adicionando mais instâncias de consumidores para lidar com o aumento da carga de mensagens.

  4. Confiabilidade: Garante a entrega das mensagens mesmo em caso de falhas de rede ou de aplicativos, utilizando mecanismos como confirmação de entrega e persistência de mensagens.

  5. Flexibilidade: Oferece diferentes padrões de troca de mensagens, como filas, tópicos e roteamento, para atender a diferentes necessidades de comunicação.

Como funciona o RabbitMQ?

O RabbitMQ funciona como um intermediário entre produtores e consumidores de mensagens. Os produtores enviam mensagens para o RabbitMQ, que as armazena em filas. Os consumidores se conectam ao RabbitMQ e recebem as mensagens das filas.

O RabbitMQ oferece diferentes tipos de trocas (exchanges) para determinar como as mensagens são roteados para as filas. As trocas mais comuns são:

  • Direct: Roteia as mensagens para a fila cujo nome corresponde à chave de roteamento da mensagem.
  • Fanout: Envia cópias da mensagem para todas as filas associadas à troca.
  • Topic: Roteia as mensagens para uma ou mais filas com base em um padrão de correspondência entre a chave de roteamento da mensagem e o nome da fila.
  • Headers: Roteia as mensagens com base nos cabeçalhos (headers) da mensagem, em vez da chave de roteamento.

Em que cenários o RabbitMQ é utilizado?

  • Processamento de pedidos: Para processar pedidos de forma assíncrona, sem bloquear o usuário enquanto o pedido é processado.
  • Comunicação entre microsserviços: Para permitir que os microsserviços se comuniquem entre si de forma assíncrona e desacoplada.
  • Processamento de dados em tempo real: Para processar grandes volumes de dados em tempo real, como logs, métricas e eventos.
  • Integração de sistemas: Para integrar diferentes sistemas, como sistemas de CRM, ERP e e-commerce.

O RabbitMQ é uma ferramenta poderosa para construir sistemas distribuídos escaláveis, confiáveis e flexíveis. Ele permite que os aplicativos se comuniquem de forma assíncrona, desacoplada e confiável, facilitando a criação de arquiteturas de microsserviços e o processamento de dados em tempo real.

Exemplo:

Arquitetura de Emissão de Notas Fiscais com RabbitMQ

Descrição:

  1. Sistema de Emissão de Notas Fiscais:

    • Recebe as informações da nota fiscal (cliente, produtos, valores, etc.).
    • Valida os dados da nota fiscal.
    • Envia uma mensagem para a fila "EmissaoNF" no RabbitMQ.
  2. RabbitMQ:

    • Atua como um intermediário (message broker) entre os sistemas.
    • Recebe a mensagem da fila "EmissaoNF".
    • Roteia a mensagem para a fila "ProcessamentoNF".
  3. Processador de Notas Fiscais:

    • Consome a mensagem da fila "ProcessamentoNF".
    • Gera o arquivo XML da nota fiscal.
    • Assina digitalmente o arquivo XML.
    • Envia o XML para a SEFAZ (Secretaria da Fazenda) para autorização.
    • Recebe a resposta da SEFAZ (autorizada ou rejeitada).
    • Envia uma mensagem para a fila "ResultadoNF" no RabbitMQ.
  4. Armazenamento de Notas Fiscais:

    • Consome a mensagem da fila "ResultadoNF".
    • Armazena o XML da nota fiscal e o resultado da autorização.
    • (Opcional) Envia uma notificação para o cliente informando o resultado da emissão.

Vantagens:

  • Desacoplamento: Os sistemas se comunicam de forma assíncrona, sem depender da disponibilidade imediata um do outro.
  • Escalabilidade: É possível adicionar mais instâncias do Processador de Notas Fiscais para lidar com o aumento da demanda.
  • Confiabilidade: O RabbitMQ garante a entrega das mensagens, mesmo em caso de falhas temporárias nos sistemas.
  • Flexibilidade: Permite adicionar novos sistemas à arquitetura sem grandes impactos.

Observações:

  • O diagrama apresenta uma visão simplificada da arquitetura. Em um sistema real, podem existir outros componentes e fluxos de mensagens.
  • A segurança da comunicação entre os sistemas deve ser garantida com o uso de protocolos como HTTPS e TLS.
  • O armazenamento de notas fiscais pode ser feito em um banco de dados relacional ou não relacional, ou em um sistema de arquivos.
  • A notificação para o cliente pode ser feita por e-mail, SMS ou outros canais.

Tecnologias:

  • RabbitMQ: Message broker
  • Python, Java, C#: Linguagens de programação para os sistemas
  • XML: Formato de arquivo para as notas fiscais
  • Assinatura Digital: Para garantir a autenticidade e integridade das notas fiscais
  • SEFAZ: Sistema da Secretaria da Fazenda para autorização de notas fiscais
  • Banco de Dados, Sistema de Arquivos: Para armazenamento das notas fiscais
  • E-mail, SMS: Para notificação do cliente (opcional)


Código no plantuml para gerar o diagrama acima:




  1. @startuml  
  2. title Arquitetura de Emissão de Notas Fiscais com RabbitMQ  
  3.   
  4. package "Sistema de Emissão de Notas Fiscais" {  
  5.   [Receber informações da nota fiscal]  
  6.   [Validar dados da nota fiscal]  
  7.   [Enviar mensagem para fila 'EmissaoNF' no RabbitMQ]  
  8. }  
  9.   
  10. package "RabbitMQ" {  
  11.   [EmissaoNF] --> [ProcessamentoNF]  
  12. }  
  13.   
  14. package "Processador de Notas Fiscais" {  
  15.   [Consome mensagem da fila 'ProcessamentoNF']  
  16.   [Gerar arquivo XML da nota fiscal]  
  17.   [Assinar digitalmente o arquivo XML]  
  18.   [Enviar XML para SEFAZ]  
  19.   [Receber resposta da SEFAZ]  
  20.   [Enviar mensagem para fila 'ResultadoNF' no RabbitMQ]  
  21. }  
  22.   
  23. package "Armazenamento de Notas Fiscais" {  
  24.   [Consome mensagem da fila 'ResultadoNF']  
  25.   [Armazenar XML e resultado da autorização]  
  26.   [Enviar notificação para o cliente]  
  27. }  
  28.   
  29. [Receber informações da nota fiscal] --> [Validar dados da nota fiscal]  
  30. [Validar dados da nota fiscal] --> [Enviar mensagem para fila 'EmissaoNF' no RabbitMQ]  
  31. [Enviar mensagem para fila 'EmissaoNF' no RabbitMQ] --> [EmissaoNF]  
  32.   
  33. [ProcessamentoNF] --> [Consome mensagem da fila 'ProcessamentoNF']  
  34. [Consome mensagem da fila 'ProcessamentoNF'] --> [Gerar arquivo XML da nota fiscal]  
  35. [Gerar arquivo XML da nota fiscal] --> [Assinar digitalmente o arquivo XML]  
  36. [Assinar digitalmente o arquivo XML] --> [Enviar XML para SEFAZ]  
  37. [Enviar XML para SEFAZ] --> [Receber resposta da SEFAZ]  
  38. [Receber resposta da SEFAZ] --> [Enviar mensagem para fila 'ResultadoNF' no RabbitMQ]  
  39. [Enviar mensagem para fila 'ResultadoNF' no RabbitMQ] --> [ResultadoNF]  
  40.   
  41. [ResultadoNF] --> [Consome mensagem da fila 'ResultadoNF']  
  42. [Consome mensagem da fila 'ResultadoNF'] --> [Armazenar XML e resultado da autorização]  
  43. [Armazenar XML e resultado da autorização] --> [Enviar notificação para o cliente]  
  44.   
  45. @enduml