Clients en périphérie
Des appareils ou de petits services ont besoin d’un chemin qui passe par un courtier.
Connectez les SDK Thalovant ou un client MQTT personnalisé sur TLS avec des identifiants de courtier par client, des sujets limités et des trames chiffrées.
Utilisez MQTT quand un courtier (broker) convient mieux qu’une connexion directe en WSS ou en HTTPS.
MQTT reste un protocole public sécurisé. Les clients se connectent au courtier en TLS, s’authentifient avec des identifiants propres à chaque client et ne publient que sur les sujets (topics) permis pour ce client.
Clients en périphérie
Des appareils ou de petits services ont besoin d’un chemin qui passe par un courtier.
Frontières réseau
Le client joint un courtier de façon plus fiable qu’une route directe vers le hub.
Trafic convergent
De nombreux clients ont besoin d’un accès isolé à leurs sujets par un seul point de terminaison public du courtier.
Pas le choix par défaut
Commencez par WSS, sauf si MQTT règle un vrai problème de déploiement.
mqtts://.topic_prefix que renvoie l’identité.Quand MQTT est activé, l’identité du client porte un bloc mqtt :
{ "mqtt": { "endpoint": "mqtts://mqtt.thalovant.com:8883", "username": "client-access-key", "password": "client-broker-password", "topic_prefix": "<namespace>/<hub-id>/<client-id>", "tls": true }}| Champ | Signification |
|---|---|
endpoint | URL du courtier. Les clients publics devraient utiliser mqtts://. |
username | Nom d’utilisateur du courtier pour ce client. C’est la clé d’accès du client. |
password | Mot de passe du courtier pour ce client. |
topic_prefix | Base complète des sujets de ce client. Ajoutez-y un suffixe de canal au lieu de coder un chemin en dur. |
tls | Indique si le client doit se connecter en TLS. |
Le topic_prefix de l’identité est la base complète de tous les sujets qu’utilise ce client. Il ressemble à <namespace>/<hub-id>/<client-id>, où <client-id> est la clé d’accès du client. Traitez-le comme une valeur opaque : lisez topic_prefix dans l’identité et ajoutez le suffixe de canal au lieu d’assembler le chemin vous-même.
| Canal | Sujet | Rôle |
|---|---|---|
| Entrant | <topic_prefix>/in | Le client y publie ses requêtes. |
| Sortant | <topic_prefix>/out | Le client s’y abonne pour recevoir les réponses. |
| État | <topic_prefix>/status | Présence et état conservés (retained) pour ce client. |
Les identifiants MQTT d’un client proviennent de son identité. Pour les lire en vue d’un client personnalisé :
mqtts://mqtt.thalovant.com:8883), le nom d’utilisateur (la clé d’accès), le mot de passe du courtier et le préfixe de sujet. Gardez aussi l’identité complète : c’est son mot de passe de hub qui authentifie la session auprès du hub. Vous pouvez aussi télécharger _identity.json.Si la connexion en deux étapes bloque le panneau, configurez-la d’abord dans Profile and Security.
Vous pouvez connecter n’importe quel client MQTT au courtier avec les identifiants ci-dessus, sans Thalovant Voice ni runtime géré. Joindre le courtier est la partie la plus simple.
Les sujets <topic_prefix>/in et <topic_prefix>/out transportent les messages de connexion et d’authentification, suivis des messages applicatifs chiffrés. Abonnez-vous au sujet sortant avant d’envoyer quoi que ce soit. Les messages chiffrés sont en binaire brut, pas en base64 ni en JSON; gardez dans l’ordre tous les fragments d’un même message et ne rejouez jamais un message.
Un client personnalisé doit se connecter au courtier et s’authentifier auprès du hub avant d’envoyer des requêtes applicatives. Utilisez le transport MQTT d’un SDK Python, Node.js, Go ou Rust compatible, ou pilotez le protocole avec la bibliothèque C embarquée et votre propre transport. Une connexion au courtier ne constitue pas à elle seule une session authentifiée avec le hub.
Conservez les clés enregistrées par le SDK d’une reconnexion à l’autre. Après la perte de la connexion au courtier, authentifiez-vous de nouveau avant d’envoyer quoi que ce soit. Utilisez des identités différentes pour les processus clients connectés en même temps.
from thalovant import ThalovantClient, ThalovantControlPlane
api = ThalovantControlPlane()
result = api.create_client_identity( "hub-id", name="python-mqtt-client", preferred_protocols=("mqtt", "wss"),)
identity = result.identityif identity.mqtt is None: raise RuntimeError("MQTT is not available for this identity.")
with ThalovantClient(identity, protocol="mqtt") as client: print(client.ask("Reply over MQTT.").text)import { ThalovantClient, ThalovantControlPlane } from "@thalovant/sdk";
const api = new ThalovantControlPlane();
const result = await api.createClientIdentity("hub-id", { name: "node-mqtt-client", preferredProtocols: ["mqtt", "wss"],});
if (!result.identity.mqtt) { throw new Error("MQTT is not available for this identity.");}
const client = new ThalovantClient(result.identity, { protocol: "mqtt" });try { const reply = await client.ask("Reply over MQTT."); console.log(reply.text);} finally { await client.close();}result, err := control.CreateClientIdentityForHubID(ctx, "hub-id", thalovant.BootstrapIdentityOptions{ Name: "go-mqtt-client", PreferredProtocols: []thalovant.HubProtocol{ thalovant.ProtocolMQTT, thalovant.ProtocolWSS, },})if err != nil { log.Fatal(err)}if result.Identity.MQTT == nil { log.Fatal("MQTT is not available for this identity.")}
client, err := thalovant.NewClientWithOptions(result.Identity, thalovant.ClientOptions{ Protocol: thalovant.ProtocolMQTT,})if err != nil { log.Fatal(err)}defer client.Close(ctx)let result = control .create_client_identity_for_hub_id( "hub-id", BootstrapIdentityOptions { name: "rust-mqtt-client".into(), preferred_protocols: vec![HubProtocol::Mqtt, HubProtocol::Wss], ..Default::default() }, ) .await?;
if result.identity.mqtt.is_none() { panic!("MQTT is not available for this identity.");}
let client = Client::with_protocol(result.identity.clone(), HubProtocol::Mqtt)?;| Symptôme | Vérification |
|---|---|
| Le SDK indique que MQTT n’est pas pris en charge | Utilisez Python, Node.js côté serveur, Go ou Rust. Kotlin, Swift, .NET et la version navigateur de Node n’ont pas de transport MQTT. Confirmez aussi que le hub et l’identité activent MQTT. |
L’identité n’a pas de bloc mqtt | Activez MQTT sur le hub, puis ouvrez Connection details ou téléchargez une nouvelle identité pour obtenir les identifiants du courtier. |
| L’authentification auprès du courtier échoue | Confirmez que le nom d’utilisateur est la clé d’accès et que le client utilise le plus récent mot de passe du courtier. Faites une rotation de l’identité au besoin. |
| TLS échoue | Utilisez le point de terminaison mqtts:// et confirmez que le certificat du courtier est valide. |
| Une publication réussit, mais rien ne répond | Confirmez que l’abonnement au sujet sortant et l’authentification auprès du hub étaient terminés avant l’envoi. Un accusé de réception du courtier ne confirme à lui seul ni l’authentification auprès du hub ni une réponse applicative. |
| Une reconnexion échoue à l’authentification | Conservez les clés enregistrées par le SDK, vérifiez le mot de passe du hub et authentifiez-vous de nouveau avant d’envoyer. |
| Les messages sont ignorés | Publiez sur <topic_prefix>/in et abonnez-vous à <topic_prefix>/out. N’inventez pas de chemins de sujets. |