O que é MQTT?

O MQTT é um protocolo de mensagens baseado em padrões, ou conjunto de regras, usado para comunicação de computador para computador. Sensores inteligentes, dispositivos acessórios e outros dispositivos da Internet das Coisas (IoT) normalmente precisam transmitir e receber dados por meio de uma rede com limitação de recursos e largura de banda limitada. Esses dispositivos IoT usam o MQTT para transmissão de dados, pois é fácil de implementar e pode comunicar dados IoT com eficiência. O MQTT oferece suporte a mensagens entre dispositivos para a nuvem e da nuvem para o dispositivo.

Por que o protocolo MQTT é importante?

O protocolo MQTT se tornou um padrão para transmissão de dados IoT porque oferece estes benefícios:

Leve e eficiente

A implementação do MQTT no dispositivo IoT requer recursos mínimos, podendo ser usado até mesmo em pequenos microcontroladores. Por exemplo, uma mensagem de controle MQTT mínima pode ter apenas dois bytes de dados. Os cabeçalhos de mensagens MQTT também são pequenos para que você possa otimizar a largura de banda da rede.

Escalável

A implementação do MQTT requer uma quantidade mínima de código que consome pouquíssima energia nas operações. O protocolo também tem recursos integrados que oferecem suporte à comunicação com um grande número de dispositivos IoT. Portanto, você pode implementar o protocolo MQTT para se conectar a milhões desses dispositivos.

Confiável

Muitos dispositivos IoT se conectam em redes celulares não confiáveis com baixa largura de banda e alta latência. O MQTT tem recursos integrados que reduzem o tempo que o dispositivo IoT leva para se reconectar à nuvem. Além disso, define três níveis diferentes de qualidade de serviço para garantir a confiabilidade para casos de uso de IoT: no máximo uma vez (0), pelo menos uma vez (1) e exatamente uma vez (2).

Seguro

Com o MQTT, os desenvolvedores têm mais facilidade para criptografar mensagens e autenticar dispositivos e usuários usando protocolos de autenticação modernos, como OAuth, TLS1.3, certificados gerenciados pelo cliente etc.

Um bom suporte

Muitas linguagens, como Python, têm amplo suporte para implementação do protocolo MQTT. Portanto, os desenvolvedores podem implementá-lo rapidamente com codificação mínima em qualquer tipo de aplicação.

Qual é a história por trás do protocolo MQTT?

O protocolo MQTT foi inventado em 1999 para ser usado no setor de petróleo e gás. Engenheiros precisavam de um protocolo para largura de banda mínima e perda mínima de bateria para monitorar oleodutos via satélite. Inicialmente, o protocolo era conhecido como Message Queuing Telemetry Transport devido ao produto da IBM MQ Series que oferecia suporte a sua fase inicial. Em 2010, a IBM lançou o MQTT 3.1 como um protocolo gratuito e aberto para qualquer pessoa implementar, que foi encaminhado, em 2013, ao órgão de especificação Organization for the Advancement of Structured Information Standards (OASIS) para manutenção. Em 2019, o OASIS lançou uma versão atualizada do MQTT 5. Agora o MQTT não é mais um acrônimo, mas é considerado o nome oficial do protocolo. 

Qual é o princípio por trás do MQTT?

O protocolo MQTT funciona conforme os princípios do modelo de publicação/assinatura. Na comunicação em rede tradicional, clientes e servidores se comunicam diretamente entre si. Os clientes solicitam recursos ou dados do servidor, e o servidor processa e envia uma resposta. Porém, o MQTT usa um padrão de publicação/assinatura para desacoplar o remetente da mensagem (publicador) do destinatário da mensagem (assinante). Em vez disso, um terceiro componente, chamado agente de mensagens, soluciona a comunicação entre publicadores e assinantes. O trabalho do agente é filtrar todas as mensagens recebidas dos publicadores e distribuí-las corretamente aos assinantes. O agente desacopla publicadores e assinantes conforme abaixo:

Desacoplamento espacial

O publicador e o assinante não estão cientes da localização da rede um do outro e não trocam informações como endereços IP ou números de porta.

Desacoplamento temporal

O publicador e o assinante não executam nem têm conectividade de rede ao mesmo tempo.

Desacoplamento de sincronização

Publicadores e assinantes podem enviar ou receber mensagens sem interromper um ao outro. Por exemplo, o assinante não precisa esperar que o publicador envie uma mensagem.

Quais são os componentes do MQTT?

O MQTT implementa o modelo de publicação/assinatura definindo clientes e agentes conforme o exemplo abaixo.

Cliente MQTT

Um cliente MQTT é qualquer dispositivo de servidor para microcontrolador que executa uma biblioteca MQTT. Se o cliente estiver enviando mensagens, atuará como publicador; se estiver recebendo mensagens, atuará como destinatário. Basicamente, qualquer dispositivo que se comunique por MQTT em uma rede pode ser chamado de dispositivo cliente MQTT.

Agente MQTT

O agente MQTT é o sistema backend que coordena mensagens entre os diferentes clientes. Entre as responsabilidades do agente estão: receber e filtrar mensagens, identificar os clientes inscritos em cada mensagem e enviar as mensagens a eles. Também é responsável por outras tarefas, como:

  • Autorizar e autenticar clientes MQTT
  • Transmitir mensagens a outros sistemas para análise posterior
  • Solucionar mensagens e sessões de clientes perdidas

Conexão MQTT

Clientes e agentes começam a se comunicar usando uma conexão MQTT. Os clientes iniciam a conexão enviando uma mensagem CONNECT ao agente MQTT. O agente confirma que uma conexão foi estabelecida respondendo com uma mensagem CONNACK. Tanto o cliente MQTT como o agente requerem uma pilha TCP/IP para se comunicarem. Os clientes nunca se conectam entre si, apenas com o agente.

Como o MQTT funciona?

Abaixo, há uma visão geral de como o MQTT funciona. 

  1. Um cliente MQTT estabelece uma conexão com o agente MQTT.
  2. Depois de conectado, o cliente pode publicar mensagens, assinar mensagens específicas ou fazer as duas coisas.
  3. Ao receber uma mensagem, o agente MQTT a encaminha aos assinantes interessados.

Vamos esmiuçar os detalhes para melhorar a compreensão.

Tópico do MQTT

O termo “tópico” refere-se a palavras-chave que o agente MQTT usa para filtrar mensagens para os clientes MQTT. Os tópicos são organizados de maneira hierárquica, semelhante a um diretório de arquivos ou pastas. Por exemplo, imagine um sistema de casa inteligente que está em funcionamento em uma casa de vários andares que tem diferentes dispositivos inteligentes em cada andar. Nesse caso, o agente MQTT pode organizar tópicos como:

ourhome/groundfloor/livingroom/light

ourhome/firstfloor/kitchen/temperature

Publicação de MQTT

Os clientes MQTT publicam mensagens contendo o tópico e os dados em formato de bytes. O cliente determina o formato de dados, como dados de texto, dados binários, arquivos XML ou JSON. Por exemplo, uma lâmpada no sistema de casa inteligente pode publicar uma mensagem on no tópico livingroom/light.

Assinatura de MQTT 

Os clientes MQTT enviam uma mensagem SUBSCRIBE (ASSINAR) ao agente MQTT para receber mensagens sobre tópicos de interesse. Esta mensagem contém um identificador exclusivo e uma lista de assinaturas. Por exemplo, o aplicativo de casa inteligente de seu telefone deseja exibir quantas luzes estão acesas em sua casa. Ele assinará o tópico light e aumentará o contador para todas as mensagens on

O que é MQTT over WSS?

O MQTT over WebSockets (WSS) é uma implementação MQTT para receber dados diretamente em um navegador da Web. O protocolo MQTT define um cliente JavaScript para fornecer suporte WSS para navegadores. Nesse caso, o protocolo funciona normalmente, mas adiciona cabeçalhos às mensagens MQTT para também oferecer suporte ao protocolo WSS. Pense nisso como a carga útil da mensagem MQTT envolvida em um envelope WSS.

O MQTT é seguro?

A comunicação de MQTT usa o protocolo SSL para proteger dados sigilosos transmitidos por dispositivos IoT. É possível implementar identidade, autenticação e autorização entre clientes e o agente usando certificados SSL ou senhas. O agente MQTT normalmente autentica clientes usando as senhas dele, bem como identificadores de cliente exclusivos que ele aloca para cada cliente. Na maioria das implementações, o cliente autentica o servidor com certificados ou pesquisas de DNS. Você também pode implementar protocolos de criptografia com MQTT. 

O MQTT é RESTful?

O MQTT não é RESTful. A transferência de estado representacional (REST) é uma metodologia arquitetural de comunicação em rede que usa o padrão de solicitação-resposta de comunicação entre remetentes e destinatários de mensagens. Em comparação, o MQTT usa o modelo de comunicação de publicação/assinatura na camada da aplicação e requer conexão TCP permanente para transmitir mensagens por push. Porém, o MQTT versão 5 adiciona um novo método de solicitação-resposta para agir de maneira semelhante à REST, em que o publicador pode anexar um tópico de resposta especial, que o destinatário processa e gera uma devida resposta.

Como a AWS pode oferecer suporte à implementação de MQTT?

O AWS IoT Core é um serviço totalmente gerenciado que permite conectar bilhões de dispositivos de IoT e encaminhar trilhões de mensagens para produtos da AWS. Você pode:

  • Conectar, gerenciar e expandir suas frotas de dispositivos de maneira fácil e confiável, sem provisionar ou gerenciar servidores.
  • Escolha seu protocolo de comunicação preferido, incluindo MQTT, HTTPS, MQTT sobre WSS e LoRaWAN.
  • Proteja conexões e dados de dispositivos com autenticação mútua e criptografia de ponta a ponta.
  • Filtrar, transformar e agir de acordo com os dados de dispositivos em tempo real, com base nas suas regras de negócios definidas.

Comece a usar MQTT na AWS criando uma conta gratuita hoje mesmo.

Próximas etapas do MQTT na AWS

Confira outros recursos relacionados a produtos
Saiba mais sobre serviços de Internet das Coisas 
Cadastre-se para obter uma conta gratuita

Obtenha acesso instantâneo ao nível gratuito da AWS. 

Cadastre-se 
Comece a criar no console

Comece a criar com a AWS no Console de Gerenciamento da AWS.

Fazer login