¿Qué es un identificador de suscripción de MQTT?
Un identificador de suscripción es una pequeña conveniencia de MQTT 5 que resuelve un problema real de despacho: cuando llega un mensaje, ¿cuál de mis suscripciones lo causó? Para un cliente SCADA que se suscribe a muchos patrones de tópico traslapados, es el encabezado que le dice al cliente exactamente qué manejador llamar. Esta página explica cómo se fija un identificador de suscripción, cómo lo repite el broker y por qué las suscripciones con comodines traslapados lo vuelven útil.
Identificador de suscripción de MQTT en una línea: Un identificador de suscripción de MQTT es un entero que un cliente adjunta a una solicitud SUBSCRIBE en MQTT 5. El broker lo recuerda y lo incluye como propiedad en cada PUBLISH que coincide con esa suscripción. Cuando llega un mensaje con el identificador, el cliente sabe de inmediato cuál de sus suscripciones disparó la entrega y puede despachar el mensaje al manejador correcto sin volver a comparar tópicos por su cuenta.
Cómo se asigna y se devuelve el identificador
El cliente elige el identificador, un entero positivo, y lo incluye como propiedad en el paquete SUBSCRIBE. Desde entonces el broker asocia ese número con la suscripción. Cada vez que un mensaje publicado coincide con el filtro de tópico de esa suscripción, el broker copia el identificador de suscripción en las propiedades del PUBLISH que entrega al cliente. El cliente lee el identificador del mensaje entrante y lo usa como llave de ruteo. Es puramente una conveniencia del lado del cliente implementada con cooperación del broker; el publicador no se entera de ella.
El valor de esto se vuelve obvio con suscripciones traslapadas. Un cliente puede suscribirse al tópico de datos de un dispositivo específico y también a un comodín de toda la planta que incluye a ese mismo dispositivo, usando los comodines de más y numeral. Un solo mensaje publicado puede coincidir con ambos filtros. Sin identificadores de suscripción, el cliente debe rehacer su propia comparación de tópicos en cada llegada para averiguar por qué vino el mensaje, duplicando un trabajo que el broker ya hizo. Con identificadores el broker simplemente se lo dice, y donde un mensaje coincide con dos suscripciones el broker devuelve ambos identificadores.
Esto se conecta con las opciones de suscripción retain handling y no local porque todas se configuran por suscripción en el paquete SUBSCRIBE de MQTT 5. El identificador de suscripción es el que cambia más directamente la estructura del código de la aplicación, porque le permite construir una tabla de despacho limpia con clave entera en lugar de una cadena de comparaciones de patrones de tópico en el callback de mensajes. En un cliente que maneja miles de mensajes por segundo, ahorrarse una comparación de tópicos en cada uno no es un ahorro trivial.
Dónde encaja en un consumidor SCADA
Un servicio de ingestión de SCADA en la nube es exactamente la clase de cliente que se suscribe a muchos patrones a la vez: una suscripción para los mensajes birth y death de Sparkplug, otra para los mensajes de datos, otra para reconocimientos de comandos, quizá un comodín amplio de diagnóstico. Cada una quiere un manejador distinto. Etiquetar cada suscripción con un identificador deja que el bucle de mensajes sea un simple switch sobre el identificador devuelto, lo que mantiene rápido el camino caliente y legible el código, y complementa una ingestión a base de datos limpia.
El identificador no reemplaza al tópico; el mensaje sigue llevando su tópico completo, que el manejador necesita para saber a qué dispositivo o métrica específica se refiere el mensaje. Lo que el identificador ahorra es el paso de clasificación, la decisión de qué categoría de mensaje es este. Usted sigue interpretando el tópico para extraer el grupo, el nodo de borde y el dispositivo de una jerarquía Sparkplug, pero ya no tiene que adivinar qué patrón de suscripción le trajo el mensaje.
El soporte no es universal, y esa es la trampa práctica. Un broker anuncia en su CONNACK si soporta identificadores de suscripción. Un cliente bien escrito debe manejar ambos casos: usar el identificador para despacho rápido cuando el broker lo ofrece, y recurrir a comparar el tópico contra su propia lista de suscripciones cuando no. Diseñar el consumidor de modo que el identificador sea una optimización y no un requisito lo mantiene portable entre brokers de capacidad distinta.
Preguntas frecuentes
¿Un mensaje puede llevar más de un identificador de suscripción?
Sí. Si un solo mensaje publicado coincide con varias suscripciones de un cliente, cada una con su propio identificador, el broker incluye cada identificador coincidente como propiedad separada en el PUBLISH entregado. El cliente entonces sabe que el mensaje satisfizo todas esas suscripciones a la vez. Este es precisamente el caso de comodines traslapados que hace valiosa la característica, porque le dice al cliente el conjunto completo de razones por las que el mensaje fue entregado sin que el cliente rehaga comparación alguna de tópicos.
¿Un identificador de suscripción es lo mismo que un identificador de cliente?
No, y los nombres invitan a la confusión. Un identificador de cliente es el nombre único que un cliente presenta en su paquete CONNECT para identificar su sesión ante el broker. Un identificador de suscripción es un entero que el cliente adjunta a un SUBSCRIBE particular, repetido en los mensajes coincidentes, usado solo para enrutar publicaciones entrantes hacia manejadores. Uno nombra la sesión completa; el otro etiqueta una sola suscripción dentro de ella. Viven en paquetes distintos y sirven propósitos por completo diferentes.
Fuentes y lecturas
Referencias primarias de los organismos de normas y reguladores que definen este tema:
- MQTT Version 5.0 Specification - OASIS
Servicios de automatización
¿Necesita convertir esta información en un sistema que funcione?
Merobix integra SCADA, programa PLC Allen-Bradley y Siemens, y diseña y fabrica tableros de control industrial.
Las solicitudes de reunión se revisan antes de confirmarse.