Tous les produits
Search
Centre de documentation

IoT Platform:Spécifications du protocole MQTT

Dernière mise à jour :Aug 09, 2026

Message Queuing Telemetry Transport (MQTT) est un protocole de messagerie asynchrone basé sur la pile de protocoles TCP/IP. Ce protocole léger de type publication-abonnement est conçu pour les environnements réseau peu fiables et convient aux scénarios où les appareils disposent d'un espace de stockage matériel ou d'une bande passante réseau limités. Le protocole MQTT découple les émetteurs et les récepteurs de messages dans le temps et l'espace. IoT Platform prend en charge les connexions des appareils via MQTT.

Versions prises en charge

IoT Platform prend en charge les connexions MQTT standard, compatibles avec les versions 5.0, 3.1.1 et 3.1. Spécifications officielles : MQTT 5.0, MQTT 3.1.1, MQTT 3.1.

Important

Pour utiliser le protocole MQTT 5.0, vous devez au préalable souscrire à une instance Enterprise.

Différences par rapport au MQTT standard

  • Prend en charge les messages MQTT tels que PUB, SUB, PING, PONG, CONNECT, DISCONNECT et UNSUB.

  • Prend en charge les sessions propres (clean sessions).

  • Ne prend pas en charge les messages testamentaires (will messages) ni les messages conservés (retained messages).

  • Prend en charge les niveaux de qualité de service (QoS) 0 et 1. Ne prend pas en charge le QoS 2.

  • Ne prend pas en charge le QoS d'abonnement. Le QoS du message est déterminé par l'émetteur (PUB).

  • Prend en charge le mécanisme Revert-RPC (RRPC) basé sur les topics MQTT natifs, permettant des appels synchrones du serveur vers l'appareil.

Fonctionnalités MQTT 5.0 prises en charge

MQTT 5.0 introduit des fonctionnalités qui améliorent les performances et la facilité d'utilisation. Consultez Annexe C. Résumé des nouvelles fonctionnalités de MQTT v5.0 et Présentation de MQTT 5.0.

IoT Platform prend en charge les fonctionnalités MQTT 5.0 suivantes.

Fonctionnalités prises en charge

Utilisation

Expiration de session

  • Définissez Clean Start et Session Expiry Interval lors de la connexion :

    MqttConnectionOptions options = new MqttConnectionOptions();
    options.setCleanStart(true);
    options.setSessionExpiryInterval(60L);// Unit: seconds.
    
    MqttClient mqttClient = new MqttClient(host, clientId, new MemoryPersistence());
    mqttClient.connect(options);
  • Définissez Session Expiry Interval lors de la déconnexion :

    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);

Expiration de message

Définissez Message Expiry Interval lors de la publication :

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);

Options d'abonnement

Options d'abonnement disponibles :

  • QoS : Niveau de QoS du message MQTT. Définissez-le sur 0 (message QoS 0) ou 1 (message QoS 1).

  • No Local : Indique si le client reçoit les messages qu'il publie lui-même.

    Dans MQTT 3.1.1, un client reçoit ses propres messages publiés sur les topics auxquels il est abonné. Dans MQTT 5.0, définissez cette option sur true pour empêcher la livraison à soi-même.

    Valeurs :

    • true : Ne reçoit pas.

    • false : Reçoit.

  • Retain As Publish : Indique si le serveur conserve l'indicateur RETAIN lorsqu'il transfère un message à un client.

    Valeurs :

    • true : Si le message possède un indicateur RETAIN, celui-ci est conservé. Si le message ne possède pas d'indicateur RETAIN, cette option n'a aucun effet.

    • false : L'indicateur RETAIN n'est pas conservé, que le message original en possède un ou non.

    Important

    Le paramètre Retain As Publish n'affecte pas l'indicateur RETAIN dans les messages conservés.

  • Retain Handling : Indique si le serveur envoie les messages conservés au client lors de l'établissement d'un abonnement.

    Valeurs :

    • 0 : Le serveur envoie les messages conservés tant que l'abonnement du client aboutit.

    • 1 : Le serveur envoie les messages conservés uniquement si l'abonnement du client aboutit et si l'abonnement n'existait pas auparavant.

    • 2 : Le serveur n'envoie pas les messages conservés, même si l'abonnement du client aboutit.

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});

Message conservé

// 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);

Message testamentaire

// 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);

Négociation de connexion

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

Propriété utilisateur

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

Après la connexion d'un appareil via MQTT 5.0, les données UserProperty rapportées sont visibles dans les journaux d'IoT Platform.

Important

Maximum 20 propriétés. Les clés ne peuvent pas commencer par un trait de soulignement (_). La longueur combinée clé-valeur ne peut pas dépasser 128 caractères.

Modèle requête-réponse

Si le demandeur est un appareil et le destinataire est votre serveur métier, analysez ResponseTopic et CorrelationData à partir des propriétés du message après l'abonnement AMQP ou le transfert de règle. Appelez ensuite l'opération API Pub pour répondre à l'appareil.

MqttProperties properties = new MqttProperties();
properties.setCorrelationData("requestId12345".getBytes());
properties.setResponseTopic("/" + productKey + "/" + deviceName + "/user/get");
Important
  • Décodez en Base64 la valeur CorrelationData analysée pour restaurer le tableau d'octets d'origine.

  • ResponseTopic et CorrelationData ont chacun une longueur maximale de 128 caractères.

Codes d'erreur améliorés

Résolution des erreurs.

Alias de topic

Non applicable.

Abonnements partagés

Format du topic d'abonnement partagé : $share/${ShareName}/${filter}.

  • $share : Champ statique. Le topic d'un abonnement partagé doit commencer par $share.

  • ${ShareName} : Chaîne contenant uniquement des lettres, des chiffres et des traits de soulignement (_).

    Les sessions ayant le même ${ShareName} partagent un seul abonnement. Chaque message correspondant est remis à une seule session.

  • ${filter} : Filtre de topic dans un abonnement non partagé. Il prend en charge les lettres, les chiffres et les traits de soulignement (_).

Exemple :

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);

Niveaux de sécurité

  • Mode de connexion directe TLS (canal chiffré) : Offre un niveau de sécurité élevé.

    Important
    • IoT Platform prend en charge TLS 1.0, 1.1, 1.2 et 1.3. Utilisez TLS 1.2 ou 1.3 ; les versions antérieures présentent des vulnérabilités de sécurité connues.

    • Le Link SDK côté appareil utilise TLS 1.2 et 1.3 par défaut.

  • Mode de connexion directe TCP (non chiffré) : Cette fonctionnalité sera bientôt abandonnée. Ne l'utilisez pas.

    Important

    Vous assumez tous les risques de violation de données liés à l'utilisation du mode de connexion directe TCP.

Spécifications des topics

Pour les définitions et la classification des topics, consultez Qu'est-ce qu'un topic ?.

Vous pouvez consulter les topics de communication par défaut sur la page produit d'un appareil dans la console. Les topics spécifiques aux fonctionnalités sont décrits dans la documentation de chaque fonctionnalité.

Limites

Chaque identité d'appareil enregistrée ne prend en charge qu'un seul protocole de communication à la fois.

Remarques d'utilisation

IoT Platform fournit des SDK côté appareil pour les connexions MQTT. Connexion d'un appareil à l'aide d'un SDK côté appareil.

Méthodes de connexion :