Prévia do material em texto
Protocolo MQTT
MessageQueueTelemetryTransport
(Transporte de telemetria de fila de mensagens)
Prof. Luiz Eduardo C. Leite
Protocolo MQTT
O MQTT (Message Queuing Telemetry Transport) é um protocolo de
comunicação leve, baseado em publicação/assinatura
(publish/subscribe), projetado para a transmissão eficiente de
mensagens em redes com baixa largura de banda, alta latência ou
conexões instáveis.
• É amplamente utilizado em aplicações de Internet das Coisas (IoT)
devido à sua simplicidade e eficiência.
• Casos de uso:
• Monitoramento e controle de dispositivos IoT.
• Sistemas de automação residencial.
• Telemetria para veículos e máquinas industriais.
• Comunicação entre sensores remotos.
Arquitetura do MQTT
• Publisher (Publicador): é o cliente
MQTT que envia informações para os
Subscribers, através de um tópico
específico no Broker.
• Broker: O Broker é o servidor
intermediário da informação. É ele
quem recebe os dados enviados pelos
Publishers, realiza o tratamento da
informação e repassa-a aos Subscribers
inscritos nos tópicos correspondentes.
• Subscriber (Assinante): Um dispositivo
que se inscreve em tópicos no broker
para receber mensagens relevantes.
• Publishers e Subscribers não
comunicam-se diretamente em
qualquer circunstância. De fato, eles
nem sequer estão cientes da existência
do outro.
Topic: /temperature
Tópicos MQTT
No contexto do MQTT, um tópico é uma string hierárquica que
organiza e categoriza as mensagens enviadas e recebidas no sistema.
• O tópico atua como um canal de comunicação onde as mensagens
são publicadas por publicadores e recebidas por assinantes que se
inscrevem no mesmo tópico.
• Tópicos são estruturados hierarquicamente usando uma barra ( / )
como separador. Exemplo:
• casa/sala/luz (indica informações da luz na sala de uma casa).
• casa/cozinha/temperatura (indica a temperatura na cozinha).
• Tópicos não precisam ser pré-definidos no broker; publicadores e
assinantes simplesmente usam strings consistentes.
• Tópicos diferenciam maiúsculas de minúsculas. Por exemplo,
Casa/Luz e casa/luz são tópicos diferentes.
Utilização de Tópicos no Broker
• Publicação:
• Um dispositivo envia uma mensagem ao broker associada a um tópico
específico. Exemplo:
• Publicador: publica("casa/sala/luz", "ON").
• Assinatura:
• Outros dispositivos se inscrevem em tópicos para receber mensagens
publicadas nesses canais. Exemplo:
• Assinante: subscribe("casa/sala/luz").
• Entrega de mensagens:
• O broker compara o tópico da mensagem publicada com os tópicos
dos assinantes.
• Mensagens são entregues somente aos dispositivos com assinaturas
compatíveis.
• Retenção de mensagens (opcional):
• O broker pode reter mensagens no tópico para novos assinantes que
se inscrevam após a publicação.
QoS MQTT
• O MQTT oferece três níveis de garantia na entrega de
mensagens:
• QoS 0: entrega melhor esforço (sem confirmação).
• QoS 1: entrega garantida pelo menos uma vez.
• QoS 2: entrega garantida exatamente uma vez.
Mensagems MQTT
• Cabeçalho Fixo:
• Contém informações essenciais para o protocolo ( 2 Bytes ):
• Tipo de controle (4 bits): indica o tipo da mensagem (por exemplo, CONNECT, PUBLISH,
SUBSCRIBE).
• Flags (4 bits): usados para controle específico de cada tipo de mensagem (por exemplo,
DUP, QoS e RETAIN para mensagens PUBLISH).
• Tamanho do restante da mensagem (Remaining Length): um campo de comprimento
variável que indica o tamanho do cabeçalho variável e do payload.
• Cabeçalho Variável (dependente do tipo de mensagem):
• Presente em mensagens específicas, como PUBLISH, CONNECT ou SUBSCRIBE.
• Exemplos de campos possíveis:
• Tópico: obrigatório em mensagens PUBLISH (string UTF-8 que indica o canal de
comunicação).
• Packet Identifier: necessário para mensagens com QoS 1 e 2.
• Campos específicos do tipo de mensagem, como username e password no CONNECT.
• Payload:
• Contém os dados da mensagem (se aplicável).
• Por exemplo, em uma mensagem PUBLISH, o payload contém o dado que está
sendo enviado.
• É opcional e pode ter tamanho de 0 bytes.
Por que MQTT?
• Tempo de Resposta e Performance
• Na arquitetura HTTP REST, a conexão do cliente com o servidor é
intermitente.
• A arquitetura MQTT permite que os clientes permaneçam
persistentemente conectados ao Broker, fornecendo uma
comunicação bidirecional entre o cliente e o servidor.
• Devido à conexão permanente, a necessidade de conectar e
desconectar para cada transferência de dados não é necessária.
• O ping keep alive do MQTT tem uma sobrecarga muito menor em
comparação com as chamadas de conexão de reconexão que o
HTTP REST faz.
• As mensagens do MQTT são menores do que as mensagens
human readble da arquitetura HTTP REST.
Por que MQTT ?
Comparação
MQTT até 25 vezes mais rápido!
Por que MQTT?
• Consumo de Energia
• Quando comparado diretamente para a mesma transferência de
dados usando HTTP REST e MQTT, a arquitetura MQTT consome
20% menos energia.
• No caso do HTTP REST, a maior parte da energia é perdida nos
recursos usados na conexão e desconexão e na limpeza de
recursos no servidor e no cliente.
• Portanto, quando você constrói um dispositivo remoto operado
por bateria, o MQTT ajuda você com uma vida útil da bateria
maior.
Por que MQTT
• Segurança
• A maioria dos dispositivos hoje é implantada atrás de um firewall
por razões de segurança.
• Mesmo implementando um servidor REST nos dispositivos
clientes, a conexão com eles será dificultada ou até impedida
pelos firewalls.
• Por limitações da arquitetura HTTP REST, o servidor não pode
iniciar uma conexão e enviar dados para os clientes sob
demanda.
• O MQTT resolve inerentemente esse problema de comunicação
bidirecional com as conexões persistentes.
Exemplos de Brokers MQTT
• Mosquitto: implementação de um broker MQTT de código aberto, desenvolvida pela
Eclipse Foundation.
• Disponível para diversas plataformas, incluindo Linux, Windows, macOS e
dispositivos embarcados como o Raspberry Pi.
• https://mosquitto.org/
• Maqiatto: plataforma online que fornece um broker MQTT hospedado na nuvem.
• Permite que desenvolvedores testem e implementem soluções baseadas no
protocolo MQTT sem a necessidade de configurar ou hospedar seu próprio broker.
• https://www.maqiatto.com/
• Adafruit IO: plataforma baseada na nuvem projetada para integrar dispositivos IoT e
gerenciar dados de sensores e dispositivos conectados.
• Funciona como um broker MQTT, mas com algumas características adicionais.
• Fornece uma plataforma mais abrangente, com funcionalidades de
armazenamento, visualização e automação de dados, o que o diferencia de um
broker MQTT tradicional.
• https://io.adafruit.com/
https://mosquitto.org/
https://www.maqiatto.com/
https://io.adafruit.com/
Slide 1: Protocolo MQTT Message Queue Telemetry Transport (Transporte de telemetria de fila de mensagens)
Slide 2: Protocolo MQTT
Slide 3: Arquitetura do MQTT
Slide 4: Tópicos MQTT
Slide 5: Utilização de Tópicos no Broker
Slide 6: QoS MQTT
Slide 7: Mensagems MQTT
Slide 8: Por que MQTT?
Slide 9: Por que MQTT ?
Slide 10: Por que MQTT?
Slide 11: Por que MQTT
Slide 12: Exemplos de Brokers MQTT