Message Queuing Telemetry Transport (MQTT) é um protocolo de mensagens leve e popular, baseado no modelo de publicação e assinatura, ideal para conectar dispositivos e aplicações da Internet das Coisas (IoT) ou de comunicação máquina a máquina (M2M) pela internet. O MQTT foi projetado para operar com eficiência em ambientes com baixa largura de banda ou baixo consumo de energia, sendo a escolha ideal para aplicações com um grande número de clientes remotos. Ele é usado em diversos setores, incluindo eletrônicos de consumo, indústria automotiva, transportes, manufatura e saúde.

Como o MQTT funciona?

Dispositivos ou aplicações conectados via MQTT são conhecidos como clientes. Esses clientes publicam e/ou assinam mensagens em um tópico específico ou em vários tópicos. Os clientes assinantes recebem todas as mensagens publicadas nesse tópico, permitindo uma troca de dados eficiente e tolerante a falhas entre diversos dispositivos e serviços.

No centro de uma arquitetura MQTT está um broker. O broker é um servidor responsável por monitorar os clientes (e os tópicos nos quais estão inscritos), processar mensagens e encaminhá-las aos sistemas apropriados.

Versões do protocolo MQTT

Várias versões importantes do protocolo MQTT foram adotadas como padrão. A organização OASIS gerencia as revisões do protocolo e mantém uma especificação completa para cada versão. Cada revisão do MQTT ampliou o conjunto de recursos do protocolo, por isso é importante saber a qual versão do MQTT seus dispositivos e broker estão em conformidade.

Tipos e formato de mensagens MQTT

Existem vários tipos de mensagens MQTT, e cada tipo de mensagem tem um formato específico que deve ser seguido por dispositivos e aplicações compatíveis. As revisões do protocolo MQTT variam quanto ao formato e aos tipos de mensagens. Uma lista completa dos tipos de mensagens pode ser encontrada em cada especificação do protocolo MQTT.

Os três tipos mais comuns de mensagens são CONNECT, PUBLISH e SUBSCRIBE. Cada mensagem MQTT contém um cabeçalho, uma carga útil e sinalizadores opcionais. Dependendo do tipo de mensagem, o tamanho da carga útil pode variar. Por exemplo, em uma mensagem PUBLISH, a carga útil contém os dados que serão enviados a todos os dispositivos assinantes, e o tamanho do campo de dados afeta diretamente o tamanho da mensagem. Por padrão, os dispositivos MQTT se conectam pela porta 1883 sem segurança ou pela porta 8883 quando a criptografia SSL/TLS está habilitada.

Qual é um exemplo de MQTT em ação?

Os carros inteligentes são um ótimo exemplo do MQTT em ação. À medida que as montadoras adicionam novos recursos para oferecer suporte a tudo, desde diagnósticos remotos e gerenciamento de frotas até pagamentos de combustível e entretenimento, o MQTT tornou-se um padrão comum para carros conectados. Ao contrário do protocolo HTTP (Hypertext Transfer Protocol), o MQTT consegue manter uma sessão persistente mesmo quando um carro entra e sai de áreas sem cobertura ou quando sua conexão muda de torre de telefonia celular. O MQTT também oferece suporte à comunicação bidirecional, facilitando o envio e o recebimento de dados pelo carro e pelo aplicativo na nuvem sem que um precise esperar pela resposta do outro.

Qual é a diferença entre HTTP e MQTT?

HTTP e MQTT são protocolos de rede usados para transmitir dados pela internet. Vamos analisar as diferenças entre eles.

HTTP

  • Protocolo de solicitação-resposta no qual um cliente envia uma solicitação a um servidor, e o servidor responde com os dados solicitados.
  • Projetado principalmente para transmitir conteúdo da Web (como documentos HTML, imagens e dados de formulários) entre servidores Web e navegadores.
  • Exemplo: um navegador da web (o cliente) envia uma solicitação a um servidor web, e o servidor responde com dados na forma de uma página da web.

MQTT

  • Protocolo leve de mensagens baseado no modelo de publicação e assinatura, no qual os clientes assinam tópicos e recebem mensagens publicadas nesses tópicos por outros clientes.
  • Projetado para topologias de rede e dispositivos em que a baixa largura de banda, a estabilidade da conexão e o consumo de energia são fatores importantes.
  • Exemplo: o cenário do carro inteligente acima.

Por que usar MQTT na Internet das Coisas (IoT)?

Muitos recursos do MQTT fazem dele o protocolo ideal para a troca de mensagens entre dispositivos de IoT (as “coisas” da Internet das Coisas) e sistemas de backend. Aqui, destacamos quatro recursos:

  • Leve – O MQTT ocupa pouco espaço de código, sendo ideal para dispositivos com capacidade limitada de processamento e memória, como sensores.
  • Confiável – Muitos dispositivos de IoT se conectam por redes celulares. O MQTT é um protocolo adequado para redes de baixa largura de banda, que exigem mensagens compactas e usam menos dados. Isso torna o MQTT mais confiável, mesmo quando a largura de banda da rede é limitada ou instável.
  • Escalável – O modelo de publicação e assinatura pode ser facilmente ampliado com a adição de dispositivos e sistemas de backend. Um exemplo de um único dispositivo que publica dados em duas redes de backend distintas (assinantes) é um medidor inteligente residencial que envia dados de consumo tanto aos sistemas da concessionária, para fins de faturamento, quanto a um aplicativo voltado ao cliente, que o proprietário pode acessar para acompanhar o consumo de energia de sua residência.
  • Seguro – As mensagens MQTT podem ser criptografadas com o protocolo padrão Transport Layer Security (TLS) e oferecem suporte a credenciais que podem ser usadas para autenticação. Isso torna o MQTT um protocolo de mensagens seguro para aplicações de IoT que lidam com informações confidenciais, como leituras de monitoramento de saúde provenientes de diversos dispositivos médicos.

Qual protocolo de transporte o MQTT utiliza?

O MQTT utiliza o Protocolo de Controle de Transmissão/Protocolo de Internet (TCP/IP) como protocolo de transporte subjacente. Esse protocolo de rede amplamente utilizado garante que as mensagens sejam enviadas de forma confiável entre clientes e brokers.

Há vários motivos pelos quais o TCP/IP é considerado confiável e eficiente:

  • Detecção e correção de erros – Diversas técnicas verificam a integridade dos pacotes de dados, e mecanismos de retransmissão permitem recuperar pacotes perdidos.
  • Controle de fluxo – Os dados são transmitidos em taxas ideais para cada rede, evitando atrasos na transmissão e promovendo uma comunicação eficiente.
  • Multiplexação – Vários fluxos de dados podem ser enviados por uma única conexão, permitindo que vários aplicativos usem a mesma conexão simultaneamente.
  • Compatibilidade – Funciona com uma ampla variedade de dispositivos e sistemas operacionais.
  • Escalabilidade – Projetado para funcionar em redes grandes e complexas sem comprometer o desempenho, mesmo ao lidar com grandes volumes de tráfego.

Embora seja a opção mais comum, o TCP/IP não é a única alternativa para o transporte de mensagens MQTT. O protocolo MQTT também funciona por meio do Protocolo de Datagrama do Usuário (UDP) e de WebSockets.