O que é o protocolo de enfileiramento de mensagens avançado (AMQP)?

27 de março de 2024

Advanced Message Queuing Protocol (AMQP) é um protocolo de camada de aplicação padrão aberto para mensagens orientadas middleware, com foco em enfileiramento de mensagens, roteamento (ponto a ponto e publicação e assinatura), confiabilidade e segurança.

Ao contrário dos sistemas de mensagens proprietários, o AMQP é um protocolo aberto e padronizado que permite a interoperabilidade entre sistemas e aplicações. Ele permite que os aplicativos se comuniquem e enviem mensagens entre si de maneira confiável e escalável, independentemente da plataforma, arquitetura ou linguagem subjacente. Esse recurso o torna uma ferramenta essencial para a construção de sistemas distribuídos complexos ou para a integração de ambientes heterogêneos.

AMQP opera em uma arquitetura baseada em corretor, onde o corretor de mensagens atua como um intermediário que recebe mensagens de produtores (enviando aplicações) e encaminha essas mensagens para os consumidores apropriados (aplicativos receptores). Este modelo dissocia produtor e consumidor, permitindo-lhes operar de forma independente.

O protocolo define um conjunto de componentes como filas de mensagens, trocas e ligações que ajudam na flexroteamento e entrega de mensagens acessíveis. Além disso, AMQP especifica tanto o comportamento do corretor de mensagens e o próprio protocolo de mensagens, garantindo a entrega confiável de mensagens por meio de recursos como reconhecimento de mensagens, filas duráveis ​​e persistência de mensagens.

Uma breve história do AMQP

O AMQP surgiu da necessidade de um protocolo padronizado, aberto e interoperável para middleware de mensagens. Seu desenvolvimento começou em 2003, quando John O'Hara, do JPMorgan Chase, em Londres, reconheceu as limitações e os custos do uso de sistemas proprietários de mensagens para integração de aplicativos. O objetivo era criar um protocolo para facilitar a comunicação orientada a mensagens entre diferentes plataformas e tecnologias, reduzindo a dependência de fornecedores específicos e sistemas proprietários. A primeira versão oficial do AMQP, AMQP 0-9-1, foi lançada em 2006.

O lançamento do AMQP 1.0 em outubro de 2011 marcou um marco significativo. AMQP 1.0 introduziu grandes mudanças, tornando o protocolo mais flexível e interoperável, definindo um protocolo de nível de fio binário independente de linguagem que pode ser implementado em qualquer plataforma. Esta versão do AMQP recebeu amplo apoio da indústria e foi ratificada como padrão internacional pela Organização Internacional de Padronização (ISO) e pela Comissão Eletrotécnica Internacional (IEC) em 2014 como ISO/IEC 19464.

Desde então, o AMQP foi adotado globalmente para diversas aplicações, desde serviços financeiros até IoT (Internet das Coisas) e cloud computação.

Como funciona o AMQP?

AMQP (Advanced Message Queuing Protocol) opera por meio de uma estrutura meticulosamente projetada que orquestra o fluxo de mensagens entre produtores e consumidores de maneira confiável, segura e eficiente.

Na sua essência, o protocolo emprega uma arquitetura baseada em corretor que serve como intermediário, gerenciando os caminhos de comunicação dentro do sistema de mensagens. Os produtores enviam mensagens ao corretor, especificando não apenas o conteúdo, mas também os aspectos críticos. metadados, como chaves de roteamento e prioridades de mensagens. Este broker assume então a responsabilidade de processar essas mensagens, determinando seus destinos apropriados com base na lógica de roteamento estabelecida.

O roteamento de mensagens dentro do AMQP é facilitado por exchanges, que classificam as mensagens e as direcionam para as filas corretas com base em regras predefinidas e no tipo de exchange utilizado. Essa configuração permite uma variedade de padrões de mensagens, desde mensagens simples ponto a ponto até modelos mais complexos de publicação-assinatura. As filas armazenam temporariamente as mensagens, garantindo que elas sejam retidas com segurança até que o consumidor esteja pronto para processá-las. Ao receber uma mensagem, os consumidores podem reconhecer o seu processamento, sinalizando ao corretor para remover a mensagem da fila, mantendo assim a integridade e a ordem da entrega da mensagem.

Esta interação sofisticada entre os componentes do AMQP garante que as mensagens não sejam apenas entregues de forma eficiente, mas também com um alto grau de confiabilidade e segurança. O protocolo suporta recursos avançados como reconhecimento de mensagens, transações e mensagens duráveis, que são essenciais para aplicações que exigem entrega garantida de mensagens e capacidade de recuperação de falhas do sistema. Além disso, os mecanismos de segurança do AMQP, incluindo SASL para autenticação e TLS para criptografando dados em trânsito.

Componentes AMQP

AMQP facilita mensagens complexas por meio de um conjunto de componentes principais que interagem de maneira estruturada. Esses componentes são fundamentais para a arquitetura AMQP, permitindo suportar uma ampla variedade de padrões de mensagens. Aqui está uma lista e explicação desses componentes principais:

  • Broker. O corretor atua como intermediário entre produtores de mensagens (remetentes) e consumidores (receptores). É responsável por receber mensagens dos produtores, encaminhá-las de forma adequada e entregá-las aos consumidores pretendidos. O corretor garante que as mensagens sejam armazenadas, gerenciadas e encaminhadas de forma eficiente, proporcionando confiabilidade e escalabilidade ao sistema de mensagens.
  • Produtor. O produtor, também conhecido como editor, é um aplicativo ou serviço que envia mensagens. Os produtores criam mensagens e as enviam para uma exchange dentro da corretora, muitas vezes sem conhecer os consumidores específicos que receberão as mensagens. Isso desacopla as partes de envio e recebimento do sistema, melhorando flexflexibilidade e escalabilidade.
  • Consumidor. Um consumidor é um aplicativo ou serviço que recebe mensagens. Os consumidores se inscrevem em uma fila no corretor e processam as mensagens conforme elas chegam. Os consumidores podem reconhecer as mensagens depois de processadas, o que informa ao corretor que a mensagem pode ser removida da fila com segurança.
  • Troca. As exchanges são entidades AMQP para onde os produtores enviam mensagens. Uma exchange recebe e roteia mensagens para uma ou mais filas com base na chave de roteamento, no tipo de exchange e nas ligações da mensagem. As exchanges separam os produtores das filas, permitindo uma lógica de roteamento mais complexa. Existem vários tipos de trocas, incluindo:
    • Troca direta. Roteia mensagens para filas com base em uma chave de roteamento correspondente.
    • Troca de fãs. Transmite mensagens para todas as filas vinculadas sem considerar as chaves de roteamento.
    • Troca de tópicos. Roteia mensagens para filas com base em correspondências de curinga entre a chave de roteamento e o padrão de roteamento especificado na associação.
    • Troca de cabeçalhos. Roteia mensagens com base em valores de cabeçalho correspondentes, em vez de chaves de roteamento.
  • Fila. Uma fila é um buffer que armazena mensagens até que possam ser processadas com segurança por um consumidor. As filas garantem que as mensagens sejam entregues aos consumidores por ordem de chegada, embora as prioridades possam ser definidas. Os consumidores assinam filas para receber mensagens.
  • Vinculativo. Bindings são regras que vinculam filas a exchanges. Uma ligação pode incluir uma chave ou padrão de roteamento que determina como as mensagens devem ser roteadas da central para a fila. As ligações determinam o relacionamento entre trocas e filas, controlando como as mensagens são filtradas e roteadas dentro do corretor.
  • Chave de roteamento. Uma chave de roteamento é um rótulo ou identificador que os produtores anexam às mensagens quando elas são enviadas para uma exchange. O valor da chave de roteamento é usado pela central, em conjunto com as configurações de ligação, para determinar quais filas devem receber a mensagem.
  • Mensagem. A mensagem são os dados transportados entre o produtor e o consumidor. Consiste em uma carga útil (os dados reais a serem transmitidos) e cabeçalhos ou propriedades (metadados sobre a mensagem, como tipo, prioridade e modo de entrega).
  • Canal. Um canal é uma conexão virtual dentro de uma conexão de rede física. Os canais auxiliam na multiplexação da conexão de rede entre o cliente AMQP (produtor/consumidor) e a corretora para uma comunicação mais eficiente.
  • Host Virtual (vHost). Um host virtual fornece uma maneira de segregar aplicativos usando o mesmo corretor AMQP. Cada host virtual pode ter seu próprio conjunto independente de trocas, filas e ligações.

Casos de uso de AMQP

AMQP é um protocolo de mensagens versátil que oferece suporte a uma ampla variedade de casos de uso em vários setores e aplicações. Seu conjunto robusto de recursos, incluindo enfileiramento de mensagens, roteamento, confiabilidade e segurança, o torna adequado para sistemas complexos, distribuídos e escaláveis. Aqui estão alguns casos de uso importantes para AMQP:

  • Integração de aplicativos corporativos. AMQP permite aplicativos, sistemas e bases de dados comunicar e trocar dados de maneira confiável e segura. Isto é particularmente útil em ambientes heterogêneos onde os aplicativos são construídos em diferentes plataformas e tecnologias que precisam funcionar juntas de forma integrada.
  • Sistemas desacoplados. In arquiteturas de microsserviços ou ao implementar arquiteturas orientadas a serviços (SOA), o AMQP permite que os serviços se comuniquem sem estarem fortemente acoplados entre si. Esta dissociação aumenta a escalabilidade e a resiliência do sistema, uma vez que os serviços podem ser desenvolvidos, implementados e dimensionados de forma independente.
  • Processamento de dados em tempo real. AMQP é usado em cenários que exigem dados em tempo real processamento, como análise de streaming, onde os dados precisam ser coletados, processados ​​e analisados ​​imediatamente. O protocolo garante a entrega confiável de mensagens, mesmo durante falhas de rede ou atrasos no processamento.
  • Balanceamento de carga. AMQP pode distribuir tarefas ou cargas de trabalho entre vários processos ou serviços de trabalho, ajudando a equilibrar a carga e melhorar a eficiência geral e a capacidade de resposta do sistema. Este recurso é particularmente útil em cloud computação e ambientes de computação distribuída com cargas de trabalho imprevisíveis.
  • Comunicação assíncrona. AMQP suporta padrões de comunicação assíncronos, permitindo que aplicativos enviem e recebam mensagens sem bloquear operações. Este tipo de comunicação é crucial para aplicações que requerem alto rendimento e baixa latência, pois permite que permaneçam responsivos enquanto aguardam mensagens.
  • Internet das coisas (IoT). Em aplicações IoT, o AMQP é usado para coletar dados de vários sensores e dispositivos e transmiti-los para sistemas de processamento ou cloud Serviços. Sua capacidade de operar em redes restritas e suas mensagens seguras e confiáveis ​​fazem dele uma excelente escolha para cenários de IoT.
  • Serviços financeiros. AMQP é utilizado no setor financeiro para processamento de transações, sistemas de negociação em tempo real e processamento de pagamentos. Sua confiabilidade e suporte para mensagens transacionais garantem a integridade e consistência das transações financeiras.
  • Notificações e alertas. AMQP pode ser usado para implementar sistemas de notificação, onde alertas, notificações ou e-mails são enviados a usuários ou sistemas em resposta a eventos ou condições específicas. Suas mensagens confiáveis ​​garantem que as notificações sejam entregues mesmo que o destinatário esteja temporariamente indisponível.
  • Cuidados de saúde. Na área da saúde, o AMQP permite uma comunicação segura e confiável entre diferentes sistemas, como registros de pacientes, faturamento e equipamentos de diagnóstico. Ele garante que os dados confidenciais sejam transmitidos e processados ​​com segurança em conformidade com os regulamentos.

AMQP x MQTT

AMQP e MQTT (Message Queuing Telemetry Transport) são protocolos projetados para middleware orientado a mensagens, mas atendem a propósitos diferentes e são otimizados para diferentes casos de uso.

AMQP é um protocolo mais rico em recursos, fornecendo uma ampla gama de recursos de mensagens, incluindo enfileiramento de mensagens, roteamento, gerenciamento de transações e segurança. Seu modelo é inerentemente mais complexo e flexconfiável, oferecendo robustez para sistemas que precisam de controle preciso sobre comportamentos de mensagens e integrações em diversas plataformas.

Por outro lado, o MQTT foi projetado para ser simples e leve. Este protocolo segue um padrão de publicação-assinatura, destacando-se em cenários que exigem pacotes mínimos de dados e distribuição eficiente de mensagens para vários consumidores. O MQTT é caracterizado por seu baixo consumo de energia e facilidade de implementação em dispositivos com capacidades de processamento limitadas, tornando-o ideal para mensagens em tempo real em ecossistemas IoT.

Aqui está uma visão geral dessas comparações:

Ponto de ComparaçãoAMQPMQTT
Objetivo do projetoProjetado para padrões complexos de mensagens e integração empresarial.Projetado para mensagens leves, principalmente em cenários de IoT.
Sobrecarga de protocoloMaior devido a um conjunto de recursos mais abrangente.Mais baixo, otimizado para uso mínimo de largura de banda.
Modelo de mensagensSuporta modelos ponto a ponto e de publicação-assinatura, juntamente com roteamento avançado, transações e enfileiramento de mensagens.Usa principalmente um modelo de publicação-assinatura, com menos foco no roteamento de mensagens.
Qualidade de Serviço (QoS)Fornece vários níveis de garantia de entrega de mensagens, incluindo entrega no máximo uma vez, pelo menos uma vez e exatamente uma vez.Oferece três níveis de QoS: 0 (no máximo uma vez), 1 (pelo menos uma vez) e 2 (exatamente uma vez).
Casos de usoIdeal para integração de aplicativos corporativos, processos de negócios complexos e situações que exigem entrega confiável de mensagens e suporte a transações.Mais adequado para conectar dispositivos IoT, especialmente em ambientes com largura de banda e energia limitadas.
Flexibilidade e complexidadeMais complexo devido a uma ampla gama de recursos, exigindo mais conhecimento para ser implementado de forma eficaz.Mais simples e direto, facilitando a implementação em ambientes restritos.
SegurançaFornece recursos de segurança abrangentes, incluindo autenticação e criptografia.Oferece suporte a mecanismos básicos de segurança, mas geralmente depende da segurança de rede subjacente.
InteroperabilidadeProjetado para permitir a interoperabilidade entre diferentes sistemas e fornecedores, tornando-o adequado para ambientes empresariais com diversas tecnologias.Focado na interoperabilidade no contexto de dispositivos e plataformas IoT.

Anastasia
Spasojevic
Anastazija é uma redatora de conteúdo experiente, com conhecimento e paixão por cloud computação, tecnologia da informação e segurança online. No phoenixNAP, ela se concentra em responder a questões candentes sobre como garantir a robustez e a segurança dos dados para todos os participantes do cenário digital.