RabbitMQ explicado em 5 minutos ou menos

Veremos hoje como acelerar o tempo de carregamento de suas páginas executando o processamento mais pesado de forma assíncrona, tudo gerenciado de forma muito simples, graças ao RabbitMQ.

A estabilidade e a velocidade de um aplicativo ou site certamente estão entre os fatores mais importantes para os usuários. Quem nunca saiu de um site antes mesmo de ver a primeira página porque demorou muito?

O que é RabbitMQ

RabbitMQ é um agente de mensagens de código aberto, distribuído e escalável que serve como intermediário para uma comunicação eficiente entre produtores e consumidores.

O RabbitMQ implementa o protocolo de mensagens da camada de aplicação AMQP, que tem como foco a comunicação de mensagens assíncronas com garantia de entrega por meio de confirmações de recebimento de mensagens do broker para o produtor e dos consumidores para o produtor.

Como funciona o RabbitHQ

De forma simplificada, o RabbitMQ define filas que irão armazenar as mensagens enviadas pelos produtores até que os aplicativos consumidores recebam a mensagem e a processem. Permite projetar e implementar sistemas distribuídos, nos quais um sistema é dividido em módulos independentes que se comunicam entre si por meio de mensagens.

Como toda comunicação, precisamos de um produtor, uma mensagem e um receptor. No meio do bolo está o RabbitMQ, que seria o local onde a mensagem fica esperando o destinatário.

Vamos entender melhor como funciona conhecendo os tipos de trocas que representam a troca de mensagens.

Tipos de câmbio

Por meio de trocas, sempre que enviamos uma mensagem via RabbitMQ, não a enviamos diretamente para uma fila; para que outros sistemas a leiam, nós a enviamos para uma central, que é responsável por encaminhar as mensagens para diferentes filas.

Crédito da imagem: CloudAQMP

Os tipos de trocas são Direct, Fanout, Topic e Readers.

Troca Direta

Suponha que um produtor precise emitir uma mensagem de confirmação de compra para três consumidores. Ou seja, o sistema precisa se comunicar com outros três sistemas diferentes para efetuar a compra.

Como o RabbitMQ envia a mensagem separadamente para cada fila, há um impulso para fazer com que esses outros sistemas recebam a mensagem diretamente.

  Corrigir o erro de conexão de rede 0x00028002

Normalmente, a troca encaminha a mensagem para as filas, mas muitas vezes não queremos que nossas mensagens sejam enviadas para todas as filas. Portanto, existem várias condições que podemos aplicar para que um intercâmbio funcione.

Assim você pode enviar sua mensagem para apenas um consumidor; em vez de ser enviado a todos.

Chave de vinculação: para conectar uma fila a uma troca, você precisa criar um vínculo, um relacionamento entre uma fila e uma troca, como um conector.

Chave de Roteamento: Neste bind também podemos criar um elemento chamado chave de roteamento, ou seja, uma chave para encaminhar nossas mensagens para uma fila específica.

Se você tiver uma chave de roteamento X, uma chave de roteamento Y e uma chave de roteamento Z, a mensagem com chave de roteamento Y, por exemplo, passará pela fila Y e será entregue diretamente ao consumidor que você definiu para receber a mensagem.

Dessa forma, podemos ter várias filas conectadas a uma central, mas ao mesmo tempo, elas também podem ter diferentes relacionamentos com as centrais usando as chaves de roteamento.

Troca de fanout

Quando a mensagem é enviada para a central, ela é enviada para todas as filas conectadas a ela. Portanto, se você tiver 10 filas conectadas a uma troca fanout, todas as filas receberão a mensagem que foi enviada.

Troca de tópicos

É uma das trocas mais flexíveis, permitindo enviar mensagens de acordo com o assunto. E com base na forma como você nomeia as chaves de roteamento, é possível criar padrões de regras e relacionamentos entre sistemas.

Por exemplo: chave de roteamento (x.*); chave de roteamento(*.z); chave de roteamento (*.y.*).

O que é AQMP no RabbitMQ

AMQP (Advanced Message Queuing Protocol) é um protocolo de mensagens aberto usado para definir o transporte de mensagens entre vários aplicativos. É semelhante aos protocolos HTTP e TCP, pois é um protocolo de nível de fio, exceto pelo fato de permitir o transporte assíncrono.

O RabbitMQ optou por implementar o AMQP por vários motivos. A primeira é que esse protocolo é descrito como um padrão para middleware, ao contrário do JMS, que define uma API.

Um consórcio internacional, incluindo grandes empresas como Red Hat, Cisco Systems e Microsoft, escreveu esta Especificação AMQP. A segunda é a interoperabilidade desse protocolo, que permite que qualquer aplicativo implementando AMQP se comunique com um broker AMQP.

  Como tornar inteligente o seu condicionador de ar com janela muda

O AMQP não é o único protocolo usado pelo RabbitMQ. A imagem abaixo representa todos os protocolos, linguagens e APIs implementadas e/ou suportadas pelo RabbitMQ.

Melhores recursos do RabbitMQ

Além de permitir a integração de diferentes aplicações através de mensagens de forma assíncrona e de diferentes localizações, RabbitMQ oferece outras funcionalidades que o tornaram muito popular no mundo dos agentes de mensagens:

Armazenamento confiável

RabbitMQ incorpora vários recursos que permitem garantir a entrega de mensagens. Entre eles, fornece armazenamento quando nenhum consumidor pode receber a mensagem. Ele permite que os consumidores aceitem a entrega da mensagem para garantir que ela foi processada com sucesso.

Se o processamento falhar, o RabbitMQ permite que a mensagem seja recolocada na fila para ser consumida por uma instância diferente do consumidor ou ser processada novamente pelo mesmo consumidor que falhou inicialmente ao se recuperar.

O RabbitMQ também garante a ordem de entrega das mensagens; ou seja, são consumidos na mesma ordem em que chegaram nas filas do RabbitMQ.

Criação de clusters

Embora o RabbitMQ forneça grande desempenho processando milhares de mensagens por segundo, às vezes ele precisa ser capaz de processar um número maior de mensagens sem afetar o desempenho do aplicativo.

Para isso, o RabbitMQ permite a criação de clusters para escalar a solução horizontalmente, o que é transparente tanto para produtores quanto para consumidores.

Filas altamente disponíveis

No RabbitMQ, as filas podem ser replicadas em vários nós em um cluster, garantindo que, no caso de falha de um nó ou tempo de inatividade, o intermediário possa continuar recebendo mensagens dos produtores e entregá-las aos consumidores apropriados.

Roteamento flexível

No RabbitMQ, regras de roteamento flexíveis podem ser definidas, mesmo seguindo um determinado padrão, para rotear mensagens entre exchanges e filas, por meio de bindings.

Suporte a vários protocolos

Além de suportar o protocolo AMQP, RabbitMQ suporta STOMP, MQTT e HTTP através de plugins. Também incorpora mecanismos de autenticação e controle de acesso para os componentes de cada corretora.

Casos de uso da vida real do RabbitMQ

Os casos de uso mais importantes do RabbitMQ estão possibilitando a garantia de assincronia entre aplicativos, reduzindo o acoplamento entre aplicativos, distribuindo alertas e controlando a fila de jobs em segundo plano.

No entanto, os casos práticos de uso do RabbitMQ são no comércio eletrônico, onde t é usado para manipular, processar e encaminhar seus pedidos de vendas para sistemas de outros setores, como distribuição e emissão de notas fiscais.

  Como converter WebApp como PWA com notificação por push

Ao processar pedidos, você pode encaminhar sua mensagem de vendas para o centro de distribuição e uma área de faturamento. Nesse esquema, tudo funciona horizontalmente, seguindo o padrão assíncrono de envio de mensagens, mas muitas vezes é possível enviar uma ação para várias filas.

Seguindo o exemplo anterior, esta função pode ser muito útil quando o cliente faz uma compra e o produto precisa ser preparado para distribuição, transporte e nota fiscal.

E como cada um desses setores é um sistema diferente, o objetivo do RabbitMQ é encaminhar todas essas mensagens para os sistemas correspondentes.

Alternativas do Rabbit MQ:

RabbitMQ é muito mais simples do que parece, e existem várias alternativas para ele, que incluem:

#1. IronMQ

IronMQ é um software de enfileiramento de mensagens super rápido. É altamente disponível, durável em design e preferencialmente para entrega única. O IronMQ é a solução nativa de nuvem mais poderosa para a arquitetura moderna de aplicativos.

Ele oferece suporte a filas push, filas pull e pesquisas longas, o que mantém as solicitações de pesquisa abertas por mais tempo. Além disso, pode usar vários data centers de alta disponibilidade, o que facilita a escalabilidade.

Você pode implantar na nuvem, em hardware compartilhado ou dedicado ou no local. Ele também possui uma variedade de bibliotecas de cliente com documentação de fácil leitura.

#2. Apache Kafka

Kafka é uma plataforma com forte presença em streaming de eventos distribuídos. Em sua essência, o Kafka é projetado como um log de confirmação persistente, distribuído e replicado.

Sua maior usabilidade é para microsserviços de energia orientados a eventos ou aplicativos de processamento de fluxo em grande escala, replicando automaticamente eventos de forma assíncrona dentro do cluster para tolerância a falhas e alta disponibilidade.

#3. Apache ActiveMQ

ActiveMQ é um Message Broker multiprotocolo baseado em Java. Com ele, podemos integrar aplicações utilizando o protocolo de enfileiramento de mensagens AMQP na camada de aplicação.

Implementa diversos protocolos de integração, como JMS (nativo Java) e Stomp (que pode ser utilizado por aplicações PHP), entre outros.

Além disso, a Amazon possui sua versão “gerenciada” chamada Amazon MQ, que facilita muito o uso do serviço.

Palavras Finais

Os corretores de mensagens têm sido tradicionalmente uma peça importante nas arquiteturas das organizações. Ainda assim, com o aumento da entrada de usuários nos sistemas das empresas por diferentes canais, são necessários produtos que permitam escalar horizontalmente com baixo custo. Permitindo o processamento de um grande número de mensagens por segundo.

É aqui que uma nova geração de corretores, como o RabbitMQ, ganha relevância em aplicações modernas, que buscam oferecer altos níveis de disponibilidade, confiabilidade, interoperabilidade e performance aos nossos clientes.

Você também pode explorar algumas plataformas de hospedagem RabbitMQ confiáveis ​​para seu aplicativo.