¿Qué son los topics en mqtt?
En MQTT se denomina Topic a una cadena de texto UTF-8, una longitud máxima de 65536 caracteres (aunque lo normal es que sea mucho menor) y distingue entre mayúsculas y minúsculas.
Los Topics están formados por uno o más "niveles" separados entre sí por una barra inclinada '/'. Cada nivel debe está formado por uno o más caracteres.
Ejemplo
- casa/living/temperatura
- casa/living/luz
- casa/dormitorio/temperatura
El funcionamiento de los topics en mqtt
El funcionamiento de los Topcis en MQTT es sencillo y transparente. Por un lado el Broker acepta todos los Topics. No es necesario crearlo explícitamente antes de publicar o suscribirse al Broker.
Por su parte, los clientes pueden suscribirse a uno o varios Topic. Para ello, el cliente puede establecer varias suscripciones y/o emplear Wildcards, como veremos mas adelante.
Finalmente, los clientes publican mensajes indicando un único Topic. El Broker recibe el mensaje y, si encuentra alguna suscripción que cumpla con el filtro del Topic, transmite el mensaje a los clientes suscritos.
Wildcards
Cuando un cliente establece una suscripción puede suscribirse a un Topic específico, o usar Wildcards para suscribirse a múltiples Topic. Existen dos Wildcards que podemos emplear, de "NIVEL ÚNICO" O "NIVEL MÚLTIPLE"
Wildcard de nivel único
El carácter + puede ser empleado para sustituir un único nivel en cualquier lugar del Topic.
Ejemplo
Topic | Aplica |
---|---|
casa/+/temperatura |
|
casa/living/+ |
|
Te puede interesar
Wildcard nivel múltiple
El carácter # puede ser empleado para sustituir cualquier número de niveles y puede usarse únicamente al final del Topic.
Ejemplo
Topic | Aplica |
---|---|
casa/living/# |
Recibirá todos los mensajes cuyo Topic empiece por: "casa/living/"
|
casa/# |
Recibirá todos los mensajes cuyo Topic empiece por: "casa/"
|
Los Wildcards son únicamente para la suscripción. Los mensajes pueden publicarse únicamente contra un Topic.
Recomendaciones al organizar los topic
El éxito de un sistema de IoT depende enormemente de la arquitectura que diseñemos para la mensajería. En el caso de MQTT es esencial planear y organizar los Topic que vamos a emplear en el proyecto. Hay varios consejos que podemos seguir.
El principal es diseñar el sistema de Topic para que sea ampliable y mantenible. Queremos poder añadir más dispositivos a nuestra red o nuevas funcionalidades, y evitar darnos cuenta en el futuro de que el sistema que elegimos es insuficiente.
Otro consejo es mantener los Topic lo más pequeños y claros posible. Asimismo, es recomendable usar Topics lo más específicos posibles, evitando enviar mensajes a varios dispositivos y discriminar por el contenido del mensaje.
Así, por ejemplo, si se tiene varios sensores /Habitacion/Humedad/1/, /Habitacion/Humedad/2/, /Habitacion/Temperatura/1/ en lugar de usar /Habitacion/ para todos los dispositivos
Finalmente, otro pequeño consejo es emplear únicamente caracteres ASCII estándar, evitando caracteres especiales e incluso espacios. Esto hará más sencillo la interpretación de Topics, y la interoperabilidad entre lenguajes de programación y dispositivos.
Así, por ejemplo, es preferible emplear /Habitacion/ frente a /Habitación/ y /Humedad/ frente a /Sensor humedad/.