No MQTT, a palavra tópico refere-se a uma string UTF-8 que o broker usa para filtrar mensagens para cada cliente conectado. O tópico consiste em um ou mais níveis de tópico. Cada nível de tópico é separado por uma barra (separador de nível de tópico)
myHome / groundfloor / livingroom / temperature
Em comparação com uma message queue, os tópicos MQTT são muito leves. O cliente não precisa criar o tópico desejado antes de publicar ou assinar nele. O broker aceita cada tópico válido sem qualquer inicialização prévia. Observe que cada tópico deve conter pelo menos 1 caractere e que a string do tópico permite espaços vazios. Os tópicos são sensíveis a maiúsculas e minúsculas.
Quando um cliente assina um tópico, ele pode assinar o tópico exato de uma mensagem publicada ou pode utilizar wildcards para assinar múltiplos tópicos simultaneamente. Um wildcard só pode ser utilizado para assinar tópicos, não para publicar uma mensagem. Existem dois tipos diferentes de wildcards: _single-level e _multi-level.
Como o nome sugere, um wildcard de nível único substitui um nível de tópico. O símbolo de mais representa um wildcard de nível único em um tópico.
myHome / groundfloor / + / temperature
Qualquer tópico corresponde a um tópico com curinga de nível único se ele contiver uma string arbitrária no lugar do curinga. Por exemplo, uma assinatura de _myhome/groundfloor/+/temperature pode produzir os seguintes resultados:
YES => myHome / groundfloor / livingroom / temperature
YES => myHome / groundfloor / kitchen / temperature
NO => myHome / groundfloor / livingroom / brightness
NÃO => myHome / firstfloor / livingroom / temperature
NÃO => myHome / groundfloor / kitchen / fridge / temperature
O wildcard de múltiplos níveis cobre muitos níveis de tópico. O símbolo de cerquilha representa o wildcard de múltiplos níveis no tópico. Para que o broker determine quais tópicos correspondem, o wildcard de múltiplos níveis deve ser colocado como o último caractere do tópico e precedido por uma barra normal.
myHome / groundfloor / #
YES => myHome / groundfloor / livingroom / temperature
YES => myHome / groundfloor / kitchen / temperature
SIM => myHome / groundfloor / kitchen / brightness
NÃO => myHome / firstfloor / kitchen / temperature
Quando um cliente assina um tópico com um curinga multinível, ele recebe todas as mensagens de um tópico que começa com o padrão antes do caractere curinga, não importa quão longo ou profundo seja o tópico. Se você especificar apenas o curinga multinível como tópico (_#), você recebe todas as mensagens enviadas ao broker MQTT.