Dans MQTT, le terme topic désigne une chaîne UTF-8 que le broker utilise pour filtrer les messages pour chaque client connecté. Le topic est composé d'un ou plusieurs niveaux de topic. Chaque niveau de topic est séparé par une barre oblique (séparateur de niveau de topic)
myHome / groundfloor / livingroom / temperature
Contrairement à une file d'attente de messages, les sujets MQTT sont très légers. Le client n'a pas besoin de créer le sujet souhaité avant de le publier ou de s'y abonner. Le courtier accepte chaque sujet valide sans aucune initialisation préalable. Notez que chaque sujet doit contenir au moins 1 caractère et que la chaîne de sujet autorise les espaces. Les sujets sont sensibles à la casse.
Lorsqu'un client s'abonne à un sujet, il peut s'abonner au sujet exact d'un message publié ou utiliser des caractères génériques pour s'abonner à plusieurs sujets simultanément. Un caractère générique ne peut être utilisé que pour s'abonner à des sujets, pas pour publier un message. Il existe deux types de caractères génériques : _à niveau unique et _à niveaux multiples.
Comme son nom l'indique, un joker à niveau unique remplace un niveau de sujet. Le symbole plus représente un joker à niveau unique dans un sujet.
myHome / groundfloor / + / temperature
Tout topic correspond à un topic avec un joker à un seul niveau s'il contient une chaîne arbitraire à la place du joker. Par exemple, un abonnement à _myhome/groundfloor/+/temperature peut produire les résultats suivants :
YES => myHome / groundfloor / livingroom / temperature
YES => myHome / groundfloor / kitchen / temperature
NO => myHome / groundfloor / livingroom / brightness
NO => myHome / firstfloor / livingroom / temperature
NON => myHome / groundfloor / kitchen / fridge / temperature
Le joker multi-niveaux couvre plusieurs niveaux de sujet. Le symbole dièse représente le joker multi-niveaux dans le sujet. Pour que le courtier détermine quels sujets correspondent, le joker multi-niveaux doit être placé comme dernier caractère dans le sujet et précédé d'une barre oblique.
myHome / groundfloor / #
YES => myHome / groundfloor / livingroom / temperature
YES => myHome / groundfloor / kitchen / temperature
YES => myHome / groundfloor / kitchen / brightness
NO => myHome / firstfloor / kitchen / temperature
Lorsqu'un client s'abonne à un sujet avec un joker multi-niveaux, il reçoit tous les messages d'un sujet qui commence par le motif avant le caractère joker, quelle que soit la longueur ou la profondeur du sujet. Si vous spécifiez uniquement le joker multi-niveaux comme sujet (_#), vous recevez tous les messages envoyés au courtier MQTT.