O que é MQTT

IOT

Mqtt (Message Queue Telemetry Transport) é um protocolo de conectividade M2M (Máquina Máquina) para comunicação assíncrona. O protocolo é baseado em publish/subscribe onde um cliente pode se inscrever em um ou mais tópicos e receber mensagens que outros clientes publicam sobre estes temas. Em geral, o ambiente MQTT consiste de múltiplos clientes e um servidor, chamado corretor ou broker.

Desenvolvido pela IBM e Eurotech, o protocolo MQTT é lançado como um padrão aberto e a ser desenvolvido pelo OASIS (Organização para o Avanço da informação estruturada padrão), um consórcio sem fins lucrativos que impulsiona o desenvolvimento, a convergência e a adoção de padrões abertos.

Fundamentos do MQTT

O protocolo MQTT é uma alternativa excelente para os dispositivos de Internet das Coisas (IoT) e hoje é praticamente um padrão neste sentido já que é um protocolo leve e flexível, podendo ser implementado em hardwares com poucos recursos e trabalhar em redes com largura de banda limitada e alta latência.

Vamos conhecer alguns dos conceitos fundamentais do MQTT:

Broker MQTT

O broker ou corretor é o intermediário no processo de comunicação, atuando como um servidor. Cada dispositivo deverá estabelecer uma conexão com o broker para a troca de mensagens. Existem várias opções disponíveis no mercado, por exemplo:

  • RabbitMQ
  • Mosquitto
  • GnatMQ

Normalmente o servidor utiliza as portas 1883 e 8883 para o transporte de dados em uma conexão TCP/IP e uso de criptografia (SSL/TLS).

Client MQTT

O cliente é uma implementação de software responsável por estabelecer e manter uma conexão com o broker, enviar e receber as mensagens. A conexão é feita geralmente via TCP/IP, com opções de login (usuário e senha) e uso de criptografia (SSL/TLS).

Um cliente pode ser um sensor de IoT em campo ou um aplicativo em um data center que processa dados de IoT.

Todo processo de conexão estabelece também um nível de qualidade de serviço (QoS, de Quality of Service) desejado, indicando como deve ser a relação entre os elementos comunicantes. São previstos três níveis de qualidade de serviço:

  • QoS 0 (at most once): É o que conhecemos como “best effort”, ou melhor esforço. Assemelha-se ao protocolo de transporte UDP, onde não se tem confirmações de entrega de mensagem. Quem envia também não tem a obrigação de manter a mensagem armazenada para futuras retransmissões;
  • QoS 1 (at least once): Neste nível existe a confirmação de entrega de uma mensagem. Atende situações onde quem envia acaba gerando várias mensagens iguais possivelmente por um atraso na chegada de confirmação de recebimento. Neste caso, é garantido que uma delas terá o reconhecimento realizado. Note que existe um armazenamento da mensagem por parte de quem envia até a posterior confirmação;
  • QoS 2 (exactly once): Garante que a mensagem seja entregue exatamente uma vez, com envio de confirmações de recebimento e confirmações de recebimento de confirmações de recebimento. Parece confuso, mas não é, apenas existem confirmações nos dois sentidos, para tudo que é trafegado. Enquanto uma mensagem não é confirmada, ela é mantida. É um caso mais próximo do protocolo de transporte TCP.

Não existe um QoS melhor ou pior, isto irá depender de cada cenário de aplicação do MQTT, da qualidade do link de comunicação, dos recursos disponíveis no seu sensor, etc. Cada nível de QoS é negociado entre o cliente e o broker, não entre o publicador e o subscritor. Assim, é possível ter uma publicação em QoS 0 e uma subscrição em QoS 2, para um mesmo tópico.

Tópicos, publish e subscribe

Podemos entender os tópicos como os assuntos de interesse para uma comunicação. Para receber ou enviar mensagens para outros dispositivos conectados ao broker você deverá fazer isso sempre indicando o tópico de interesse. Para enviar uma mensagem será necessário fazer um publish para um tópico e para receber mensagens será necessário fazer o subscribe de um tópico. Os níveis de um tópico são separados por “/”.

Podemos usar alguns caracteres coringas em relação aos tópicos:

  • + – Coringa, qualquer informação naquele nível (Ex: topic/topic/+/topic)
  • # – Qualquer coisa abaixo daquele nível (Ex: topic/topic/#)
  • $ – Tópicos iniciados com $ são especiais usados internamente pelo broker. No mosquito por exemplo $SYS/broker/clients/total pega a quantidade de clientes ativos.

As mensagens podem ser enviadas em vários formatos já que o MQTT não impõe restrições sobre isso, sendo assim o aplicativo pode usar qualquer formato de dados para a carga útil como JSON, XML, binário criptografado ou Base64, desde que os clientes de destino possam analisar a carga útil.

Conclusão

Neste post apresentei uma introdução técnica ao protocolo MQTT. Em um próximo post vamos ver como colocar um servidor MQTT para trabalhar e implementar um cliente MQTT. Até lá! 😉