In MQTT verwijst het woord onderwerp naar een UTF-8-tekenreeks die de broker gebruikt om berichten te filteren voor elke verbonden client. Het onderwerp bestaat uit één of meer onderwerpniveaus. Elk onderwerpniveau wordt gescheiden door een schuine streep (onderwerpniveauscheider)
myHome / groundfloor / livingroom / temperature
In vergelijking met een berichtenwachtrij zijn MQTT-onderwerpen zeer lichtgewicht. De client hoeft het gewenste onderwerp niet aan te maken voordat hij het publiceert of erop abonneert. De broker accepteert elk geldig onderwerp zonder enige voorafgaande initialisatie. Merk op dat elk onderwerp minimaal 1 teken moet bevatten en dat de onderwerptekenreeks lege spaties toestaat. Onderwerpen zijn hoofdlettergevoelig.
Wanneer een client zich op een topic abonneert, kan hij zich abonneren op de exacte topic van een gepubliceerd bericht of hij kan wildcards gebruiken om zich op meerdere topics tegelijk te abonneren. Een wildcard kan alleen worden gebruikt om je op topics te abonneren, niet om een bericht te publiceren. Er zijn twee verschillende soorten wildcards: _single-level en _multi-level.
Zoals de naam al doet vermoeden, vervangt een enkelniveaujokerteken één onderwerpniveau. Het plusteken vertegenwoordigt een enkelniveaujokerteken in een onderwerp.
myHome / groundfloor / + / temperature
Elk onderwerp komt overeen met een onderwerp met een enkelniveau-jokerteken als het een willekeurige tekenreeks bevat in plaats van het jokerteken. Een abonnement op _myhome/groundfloor/+/temperature kan bijvoorbeeld de volgende resultaten opleveren:
YES => myHome / groundfloor / livingroom / temperature
JA => myHome / groundfloor / kitchen / temperature
NO => myHome / groundfloor / livingroom / brightness
NEE => mijnThuis / beganeGrond / woonkamer / temperatuur
NEE => mijntuis / beganeGrond / keuken / koelkast / temperatuur
Het jokerteken op meerdere niveaus dekt veel onderwerpniveaus. Het hekje vertegenwoordigt het jokerteken op meerdere niveaus in het onderwerp. Om te bepalen welke onderwerpen overeenkomen, moet het jokerteken op meerdere niveaus als het laatste teken in het onderwerp worden geplaatst, voorafgegaan door een schuine streep naar voren.
myHome / groundfloor / #
YES => myHome / groundfloor / livingroom / temperature
JA => myHome / groundfloor / kitchen / temperature
YES => myHome / groundfloor / kitchen / brightness
NO => myHome / firstfloor / kitchen / temperature
Wanneer een client zich abonneert op een topic met een wildcard op meerdere niveaus, ontvangt hij alle berichten van een topic dat begint met het patroon vóór het jokerteken, ongeacht hoe lang of diep het topic is. Als u alleen het jokerteken op meerdere niveaus als topic opgeeft (_#), ontvangt u alle berichten die naar de MQTT-broker worden verzonden.