Todos los productos
Search
Centro de documentos

IoT Platform:Especificaciones del protocolo MQTT

Última actualización: Sep 03, 2026

Message Queuing Telemetry Transport (MQTT) es un protocolo de mensajería asíncrona basado en la pila de protocolos TCP/IP. Al ser un protocolo ligero de publicación-suscripción, está diseñado para entornos de red no confiables y resulta adecuado para escenarios donde los dispositivos tienen recursos limitados de almacenamiento o ancho de banda. El protocolo MQTT desacopla a los emisores y receptores de mensajes tanto en tiempo como en espacio. IoT Platform admite conexiones de dispositivos mediante MQTT.

Versiones compatibles

IoT Platform admite conexiones MQTT estándar, compatibles con las versiones 5.0, 3.1.1 y 3.1. Especificaciones oficiales: MQTT 5.0, MQTT 3.1.1, MQTT 3.1.

Importante

Para usar el protocolo MQTT 5.0, primero debe adquirir una instancia Enterprise.

Diferencias respecto al estándar MQTT

  • Admite mensajes MQTT como PUB, SUB, PING, PONG, CONNECT, DISCONNECT y UNSUB.

  • Admite sesiones limpias.

  • No admite mensajes de última voluntad ni mensajes retenidos.

  • Admite niveles de Calidad de Servicio (QoS) 0 y 1. No admite QoS 2.

  • No admite QoS de suscripción. El QoS del mensaje lo determina el emisor (PUB).

  • Admite revert-RPC (RRPC) basado en temas MQTT nativos, lo que permite llamadas síncronas del servidor al dispositivo.

Funciones compatibles con MQTT 5.0

MQTT 5.0 introduce funciones que mejoran el rendimiento y la usabilidad. Consulte el Apéndice C. Resumen de nuevas funciones en MQTT v5.0 y la descripción general de MQTT 5.0.

IoT Platform admite las siguientes funciones de MQTT 5.0.

Funciones compatibles

Cómo utilizarlas

Session expiry

  • Establezca Clean Start y Session Expiry Interval al conectarse:

    MqttConnectionOptions options = new MqttConnectionOptions();
    options.setCleanStart(true);
    options.setSessionExpiryInterval(60L);// Unit: seconds.
    
    MqttClient mqttClient = new MqttClient(host, clientId, new MemoryPersistence());
    mqttClient.connect(options);
  • Establezca Session Expiry Interval al desconectarse:

    MqttProperties mqttProperties = new MqttProperties();
    mqttProperties.setSessionExpiryInterval(60L);// Unit: seconds.
    
    MqttAsyncClient mqttAsyncClient = new MqttAsyncClient(host, clientId, new MemoryPersistence());
    mqttAsyncClient.disconnect(30000, null, null, MqttReturnCode.RETURN_CODE_SUCCESS, mqttProperties);

Message expiry

Establezca Message Expiry Interval al publicar:

IntervalString content = "Hello World";
byte[] payload = content.getBytes();

// Create a message.
MqttMessage message = new MqttMessage(payload);
// Set the QoS for the message.
message.setQos(1);

MqttProperties mqttProperties = new MqttProperties();

// Set the message time-to-live (TTL).
mqttProperties.setMessageExpiryInterval(600L);

message.setProperties(mqttProperties);

// Publish the message.
MqttClient mqttClient = new MqttClient(host, clientId, new MemoryPersistence());
mqttClient.publish(topic, message);

Subscription options

Opciones de suscripción disponibles:

  • QoS: Nivel de QoS del mensaje MQTT. Establézcalo en 0 (mensaje QoS 0) o 1 (mensaje QoS 1).

  • No Local: Especifica si el cliente recibe los mensajes que publica.

    En MQTT 3.1.1, un cliente recibe sus propios mensajes publicados en los temas suscritos. En MQTT 5.0, establezca esta opción en true para evitar la autoentrega.

    Valores:

    • true: No recibe.

    • false: Recibe.

  • Retain As Publish: Especifica si el servidor conserva la marca RETAIN al reenviar un mensaje a un cliente.

    Valores:

    • true: Si el mensaje tiene una marca RETAIN, dicha marca se conserva. Si el mensaje no tiene una marca RETAIN, esta opción no surte efecto.

    • false: La marca RETAIN no se conserva, independientemente de si el mensaje original la incluye.

    Importante

    La configuración de Retain As Publish no afecta la marca RETAIN en los mensajes retenidos.

  • Retain Handling: Especifica si el servidor envía mensajes retenidos al cliente cuando se establece una suscripción.

    Valores:

    • 0: El servidor envía mensajes retenidos siempre que la suscripción del cliente sea exitosa.

    • 1: El servidor envía mensajes retenidos solo si la suscripción del cliente es exitosa y la suscripción no existía previamente.

    • 2: El servidor no envía mensajes retenidos incluso si la suscripción del cliente es exitosa.

MqttSubscription mqttSubscription = new MqttSubscription("aaa/bbb");

// Set the QoS subscription option.
mqttSubscription.setQos(1);

// Set the No Local subscription option.
mqttSubscription.setNoLocal(true);

// Set the Retain As Published subscription option.
mqttSubscription.setRetainAsPublished(true);

// Set the Retain Handling subscription option.
mqttSubscription.setRetainHandling(1);

MqttClient mqttClient = new MqttClient(host, clientId, new MemoryPersistence());
mqttClient.subscribe(new MqttSubscription[]{mqttSubscription});

Retained message

// Create a retained message.
String content = "Hello World";
byte[] payload = content.getBytes();
MqttMessage message = new MqttMessage(payload);
// Set the message as a retained message.
message.setRetained(true);

// Publish the message.
MqttClient mqttClient = new MqttClient(host, clientId, new MemoryPersistence());
mqttClient.publish(topic, message);

Will message

// Create a will message.
String content = "Will Message";
byte[] payload = content.getBytes();
MqttMessage message = new MqttMessage(payload);

MqttConnectionOptions options = new MqttConnectionOptions();
options.setUserName(USERNAME);
options.setPassword(PASSWORD.getBytes());

// Set the will message.
options.setWill(topic, message);

// Set the will delay.
MqttProperties willMessageProperties = new MqttProperties();
willMessageProperties.setWillDelayInterval(60L);
options.setWillMessageProperties(willMessageProperties);

// Establish a connection.
MqttClient mqttClient = new MqttClient(host, clientId, new MemoryPersistence());
mqttClient.connect(options);

Connection negotiation

MqttConnectionOptions connOpts = new MqttConnectionOptions();
connOpts.setMaximumPacketSize(1024L);

User property

MqttProperties properties = new MqttProperties();
List<UserProperty> userPropertys = new ArrayList<>();
userPropertys.add(new UserProperty("key1","value1"));
properties.setUserProperties(userPropertys);

Después de que un dispositivo se conecta mediante MQTT 5.0, los datos de UserProperty reportados son visibles en los registros de IoT Platform.

Importante

Máximo de 20 propiedades. Las claves no pueden comenzar con guion bajo (_). La longitud combinada de clave y valor no puede exceder los 128 caracteres.

Request-response pattern

Si el solicitante es un dispositivo y el receptor es su servidor empresarial, analice sintácticamente ResponseTopic y CorrelationData de las propiedades del mensaje después de la suscripción AMQP o el reenvío por reglas. Luego, invoque la operación de API Pub para responder al dispositivo.

MqttProperties properties = new MqttProperties();
properties.setCorrelationData("requestId12345".getBytes());
properties.setResponseTopic("/" + productKey + "/" + deviceName + "/user/get");
Importante
  • Decodifique en Base64 los datos de CorrelationData analizados para restaurar la matriz de bytes original.

  • ResponseTopic y CorrelationData tienen una longitud máxima de 128 caracteres cada uno.

Enhanced error codes

Troubleshoot errors.

Topic alias

No aplica.

Shared subscriptions

Formato de tema de suscripción compartida: $share/${ShareName}/${filter}.

  • $share: Campo estático. El tema para una suscripción compartida debe comenzar con $share.

  • ${ShareName}: Cadena que contiene únicamente letras, dígitos y guiones bajos (_).

    Las sesiones con el mismo ${ShareName} comparten una sola suscripción. Cada mensaje coincidente se entrega a una única sesión.

  • ${filter}: Filtro de tema en una suscripción no compartida. Admite letras, dígitos y guiones bajos (_).

Ejemplo:

MqttConnectionOptions options = new MqttConnectionOptions();
options.setUserName(username);
options.setPassword(password);

MqttClient mqttClient = new MqttClient(host, clientId, new MemoryPersistence());
mqttClient.connect(options);

mqttClient.subscribe("$share/testGroup/user/post", 1);

Niveles de seguridad

  • Modo de conexión directa TLS (canal cifrado): Ofrece un alto nivel de seguridad.

    Importante
    • IoT Platform admite TLS 1.0, 1.1, 1.2 y 1.3. Use TLS 1.2 o 1.3, ya que las versiones anteriores presentan vulnerabilidades de seguridad conocidas.

    • El Link SDK del lado del dispositivo usa TLS 1.2 y 1.3 de forma predeterminada.

  • Modo de conexión directa TCP (sin cifrar): Esta función se descontinuará pronto. No la use.

    Importante

    Usted asume todos los riesgos de violación de datos derivados del uso del modo de conexión directa TCP.

Especificaciones de temas

Para consultar las definiciones y clasificación de temas, véase What is a topic?.

Puede consultar los temas de comunicación predeterminados en la página de producto de un dispositivo dentro de la consola. Los temas específicos de cada función se describen en la documentación correspondiente.

Límites

Cada identidad de dispositivo registrada admite únicamente un protocolo de comunicación a la vez.

Notas de uso

IoT Platform proporciona SDK del lado del dispositivo para conexiones MQTT. Connect a device using a device-side SDK.

Métodos de conexión: