Fila de mensageria

Fila de mensageria

Imagine a seguinte situação: uma aplicação A no momento que se comunica com a aplicação B usando REST, é a aplicação B não está funcionando isso causa um error na aplicação A. Nesse momento, a fila de mensageria é a forma correta de se comunicar entre as aplicações.

É uma forma de comunicar entre as aplicações, comumente usada em arquitetura de  micro serviço e arquitetura orientada a eventos. Eu penso que é bom para cenários quando eu preciso comunicar entre aplicações é necessário garantir que as ações iram ser executadas e desacoplamento entre as aplicações.

Quando falamos sobre fila de mensageria existem 3 componentes que são necessários entender:

  • Produtor: aplicação responsável por publicar as mensagens. As mensagens são dados usados por outro componente que vou falar mais tarde.
  • Message broker(Fila): componente responsável por armazenar as mensagens publicadas pelo produtor e distribuir as mensagens entre os consumidores. Ex: SQS, RabbitMQ, Kafka e etc.
  • Consumidor: aplicação responsável por consumir mensagens armazenadas na fila.

Imagem explicando os componentes mencionados acima:

No alt text provided for this image

Outro aspecto da fila de mensageria é que são assíncronos. Processos assíncronos é um processo que pode ocorrer em um tempo mais tarde, não no mesmo momento. Ex: comprar produto no e-commerce, não precisa gerar a nota fiscal no momento, depois envia pelo email tempo depois.

Alguns cenários para aplicar fila de mensageria:

  • Quando precisa executar uma ação que demora muito, deve enviar a mensagem para outra aplicação(consumidor) executar. Isto evita problemas de performance na principal aplicação. Ex: gerar relatórios é enviar por email.
  • Comunicação entre aplicações devido garantir que as ações serão executadas.
  • Quando executar uma ação que parte de processo é demorado, pesado é não é necessário executar no momento, então deve usar fila de mensageria Ex: comprar produto no e-commerce, não precisa gerar a nota fiscal no momento, depois envia pelo email tempo depois.

Imagem explicando um cenário usando fila de mensageria para gerar relatórios:

No alt text provided for this image

Explicando passo a passo o cenário da imagem acima:

  1. Pessoas enviam requisição para api para gerar o relatório.
  2. Código da api pública as mensagens para a fila de mensageria.
  3. O consumidor consome os dados e busca em um banco de dados réplica para evitar gerar um processo pesado no banco de dados principal.
  4. After generated reports send to s3 and send email with link file s3.

Até o momento fila de mensageria é ótimo, mas existem desafios em usar essa tecnologia:

  1. O Fluxo da aplicação é complexo.
  2. Escala um aplicativo que usa mensageria é diferente de escalar aplicações usando protocolo http.
  3. Eventual consistência significa que uma ação que foi executada para fazer uma alteração irá ocorrer mais tarde, não no mesmo momento.
  4. Escrever logging das ações das aplicações. Como relacionar os logs da aplicação produtora e consumidora.
  5. Não pode escrever log em arquivos, porque é difícil analisar os problemas quando ocorre um bug.

Em resumo, a fila de mensageria é uma ótima forma de comunicação entre aplicações devido às aplicações ficarem desacopladas e mesmo se um aplicativo não estiver rodando no momento, mais tarde a aplicação consumidora conseguirá consumir os dados armazenados na fila. Mas sabemos que qualquer tecnologia não é bala de prata, então é necessário entender o porque usar e os desafios em adotar ela.


Entre para ver ou adicionar um comentário

Outros artigos de Tiago Rosa da costa

  • How to automate to make request for api using Insominia

    How to automate to make request for api using Insominia

    Introduction Recently I needed to make a request for one endpoint a lot of times, so I started searching about one…

    1 comentário
  • Serverless architecture

    Serverless architecture

    What’s serverless architecture? This serverless architecture has the following characteristics: pay to resources used…

  • Dica rápida - S3 sync

    Dica rápida - S3 sync

    O que é s3 sync? O s3 sync é uma comando da aws-cli que permite sincronizar arquivos com bucket do s3. O comando…

  • Webhooks

    Webhooks

    O que é isso? É uma requisição http usando o verbo POST que é disparada quando um evento em uma aplicação ocorre para…

    1 comentário
  • Dicas rápidas - Docker, Dockerfile e Docker compose

    Dicas rápidas - Docker, Dockerfile e Docker compose

    Docker O que é? Docker é uma plataforma que permite rodar containers. Os containers são processos onde em esses…

    2 comentários
  • Comandos essenciais do pm2

    Comandos essenciais do pm2

    Creio que antes precisamos entender o que é pm2? Pm2 é uma ferramenta que permite gerenciar processos, caso o processo…

    4 comentários
  • DICAS RÁPIDAS - PM2

    DICAS RÁPIDAS - PM2

    Recentemente está trabalhando em um projeto usando a tecnologia node.js é após finalizar algumas funcionalidade fiz o…

  • React em aplicação MVC

    React em aplicação MVC

    Como assim? Creio que você está se questionando e esse questionamento é devido não ser a forma comum de aplicar essa…

    1 comentário
  • Sugestão de fluxo para aplicar https em aplicação node.js

    Sugestão de fluxo para aplicar https em aplicação node.js

    Recentemente eu vi um colega programador com dúvida de como colocar https em uma aplicação node.js então eu sugiro o…

  • Escalabilidade em aplicações web

    Escalabilidade em aplicações web

    Escalabilidade é a capacidade de uma aplicação lidar com o crescimento em número de acesso, usuário e volume de…

    3 comentários

Outras pessoas também visualizaram

Conferir tópicos