In MQTT, il termine topic si riferisce a una stringa UTF-8 che il broker utilizza per filtrare i messaggi per ogni client connesso. Il topic è composto da uno o più livelli di topic. Ogni livello di topic è separato da una barra obliqua (separatore di livello topic)
myHome / groundfloor / livingroom / temperature
Rispetto a una coda di messaggi, i topic MQTT sono molto leggeri. Il client non deve creare il topic desiderato prima di pubblicarlo o sottoscriverlo. Il broker accetta ogni topic valido senza alcuna inizializzazione preliminare. Si noti che ogni topic deve contenere almeno 1 carattere e che la stringa del topic ammette spazi vuoti. I topic fanno distinzione tra maiuscole e minuscole.
Quando un client si sottoscrive a un topic, può sottoscriversi all'esatto topic di un messaggio pubblicato oppure può utilizzare caratteri jolly per sottoscriversi a più topic contemporaneamente. Un carattere jolly può essere utilizzato solo per sottoscriversi ai topic, non per pubblicare un messaggio. Esistono due tipi diversi di caratteri jolly: _single-level e _multi-level.
Come suggerisce il nome, un wildcard a livello singolo sostituisce un livello di argomento. Il simbolo più rappresenta un wildcard a livello singolo in un argomento.
myHome / groundfloor / + / temperature
Qualsiasi argomento corrisponde a un argomento con un wildcard a singolo livello se contiene una stringa arbitraria al posto del wildcard. Ad esempio, una sottoscrizione a _myhome/groundfloor/+/temperature può produrre i seguenti risultati:
YES => myHome / groundfloor / livingroom / temperature
YES => myHome / groundfloor / kitchen / temperature
NO => myHome / groundfloor / livingroom / brightness
NO => myHome / firstfloor / livingroom / temperature
NO => myHome / groundfloor / kitchen / fridge / temperature
La wildcard multilivello copre molti livelli di topic. Il simbolo cancelletto rappresenta la wildcard multilivello nel topic. Affinché il broker possa determinare quali topic corrispondono, la wildcard multilivello deve essere posizionata come ultimo carattere nel topic e preceduta da una barra in avanti.
myHome / groundfloor / #
YES => myHome / groundfloor / livingroom / temperature
YES => myHome / groundfloor / kitchen / temperature
YES => myHome / groundfloor / kitchen / brightness
NO => myHome / firstfloor / kitchen / temperature
Quando un client si sottoscrive a un topic con un wildcard multi-livello, riceve tutti i messaggi di un topic che inizia con il pattern precedente al carattere wildcard, indipendentemente da quanto sia lungo o profondo il topic. Se si specifica solo il wildcard multi-livello come topic (_#), si ricevono tutti i messaggi inviati al broker MQTT.