Cami Can Calders, 8 2º-2ª | 08173 Sant Cugat del Valles info@bmotes.com 932504996

WhatsBee blog

Introducción a MQTT

Objetos conectados > > Introducción a MQTT

Basado en https://dzone.com/refcardz/getting-started-with-mqtt

Qué es MQTT

MQTT es un protocolo de mensajería de tipo publicación/suscripción, desarrolado por IBM y estandarizado por OASIS.

  • Es ligero, simple, abierto y muy fácil de implementar.
  • Es una buena opción para sistemas M2M (Machine to Machine) y del Internet de las Cosas debido a que su sobrecarga en el protocolo es mínima y corre en prácticamente cualquier sistema embebido.
  • MQTT utiliza características del transporte TCP, por lo que el requisito mínimo para el uso de MQTT es el uso de TCP.

Casos de Uso

MQTT es un protocolo muy adecuado en los casos en los que la entrega de mensajes debe de ser confiable, pero no se disponen de conexiones de red fiables.
Sus principales aplicaciones son:

  • Telemetría
  • Casa inteligente
  • Monitorización de Energía
  • Aplicaciones de Chat
  • Servicios de notificación
  • Comunicación Publish/Subscribe

En esta forma de comunicación se desacoplan los clientes que publican (Publisher) de los que consumen los datos (Suscribers). Eso significa que los clientes no se conocen entre ellos unos publican la información y otros simplemente la consumen, simplemente todos tienen que conocer al message broker.
El desacoplamiento se produce en tres dimensiones:

  • En el espacio: El publicador y el suscriptor no tienen porqué conocerse.
  • En el tiempo: El publicador y el suscriptor no tienen porqué estar conectados en el mismo momento.
  • En la sincronización: las operaciones en cualquiera de los dos componentes no quedan interrumpidas mientras se publican o se reciben mensajes.
    Tipos de mensajes MQTT

MQTT tiene 14 tipos de mensajes, normalmente un usuario sólo usa los mensajes de CONNECT, PUBLISH, SUBSCRIBE Y UNSUBSCRIBE.
Si quereis conocer los tipos de mensajes podéis consultarlos en : https://dzone.com/refcardz/getting-started-with-mqtt

Tópicos MQTT

Un tópico es una cadena UTF-8 que usa el Broker para filtrar mensajes para cada cliente conectado.
MQTT soporta dos tipos de Comodines (Wilcards) (+ y #):

  • Comodín de nivel simple (+): El comodín reemplaza exactamente un nivel del topic. Puede ser utilizado varias veces en la suscripción.
  • Comodin Multinivel (#): reemplaza cualquier número de niveles del topic. Solo se puede utilizar una vez al final de la suscripción.

Ejemplos de Topics MQTT Válidos:

  • casa/prueba/topic
  • casa/+/topic
  • casa/#
  • casa/+/+
  • +/#
  • #
  • publish-suscribe

Calidad del Servicio

MQTT soporta tres Calidades del Servicio (QoS).
Cada mensaje publicado se envía con uno de estos niveles de Quality of Service (QoS).
Estos niveles representan las diferentes garantías en la entrega del mensaje.

  • QOS=0: Al menos un envío: El Sender hace su mejor esfuerzo para enviar el mensaje y que llegue al destino, confía en la fiabilidad del TCP. No se hacen retransmisiones.
  • QOS=1; Al menos una entrega: El Receiver recibe el mensaje por lo menos una vez. Si el receiver no confirma la recepción del mensaje o se pierde en el camino el Sender reenvía el mensaje hasta que recibe por lo menos una confirmación. Pueden duplicarse mensajes.
  • QOS=2: Exactamente una entrega: El protocolo se asegura de que el mensaje llega exactamente una vez al receptor. Eso incrementa la sobrecarga en la comunicación pero es la mejor opción cuando la duplicación de un mensaje no es aceptable.

Otros conceptos

  • Un cliente puede establecer un mensaje Last Will and Testament (LWT) en el momento en el que conecta conecta con el Broker MQTT. Si el cliente no desconecta correctamente el Broker envía el mensaje LWT.
  • Cada mensaje MQTT puede ser enviado como un mensaje con retención (retained), en este caso cada nuevo cliente que conecta a un tópic recibirá el último mensaje retenido de ese tópico.
    Cuando un cliente conecta con el Broker puede solicitar que la sesión sea persistente, en ese caso el Broker almacena todas las suscripciones del cliente, todos los mensajes QoS 1 y 2 no procesados o perdidos por el cliente
  • Un mensaje MQTT CONNECT contiene un valor keepAlive en segundos donde el cliente establece el máximo tiempo de espera entre intercambio de mensajes

Implementaciones MQTT

Existen implementaciones de MQTT para virtualmente cualquier plataforma.

Escalado MQTT

En una Arquitectura basada en Broker es fundamental evitar el SPOF (punto único de fallo). En el contexto MQTT hay 2 estrategias principales:

  • Bridging: hace forward de mensajes a otro bróker MQTT. Es la solución de HiveMQ, Mosquitto, IBM MQ
  • Clustering: soportando añadido dinámico de nodos al cluster. Lo usa ActiveMQ, HiveMQ o RabbitMQ.

Ya sabemos lo importante que es la seguridad, y más en escenarios IoT en el que comunican objetos entre sí.
MQTT confía en tecnologías estándares para esto:

    • Autenticación usuario/Password
    • Seguridad SSL/TLS

Nuevas características de MQTT 3.1.1

MQTT 3.1.1 es la versión más reciente de MQTT (octubre de 2014).
Esta versión es compatible hacia atrás con la 3.1 aunque añade alguna característica interesante como clientes MQTT anónimos.