Builder de Tópicos MQTT
Construtor de tópicos MQTT com wildcards + e #, valida hierarquia e sugere padrões (sparkplug B, homie 4).
Modelando tópicos MQTT que aguentam escala
MQTT (Message Queuing Telemetry Transport) é um protocolo leve de publish/subscribe criado em 1999 por Andy Stanford-Clark (IBM) e Arlen Nipper (Eurotech) para mandar dados de sensores pelos links SCADA de um oleoduto. Virou padrão OASIS em 2014 e hoje é o transporte de fato do IoT — milhões de dispositivos em satélite, NB-IoT, gateways LoRa e Wi-Fi doméstico alimentam brokers via MQTT porque o protocolo é minúsculo (cabeçalho fixo de 2 bytes), tolera link ruim e funciona em 9,6 kbps.
Um tópico é a string de roteamento que desacopla publishers de subscribers. É um texto UTF-8 hierárquico com níveis separados por barra — home/sala/temperatura, br/fabrica1/sensor/123/temp. O broker nunca inspeciona o payload; só o tópico casa assinaturas com publicações. Bom design de tópico mantém uma frota de 10 mil dispositivos administrável; design ruim transforma cada mudança em um refactor de frota inteira.
Wildcards e regras de assinatura
Wildcards existem só para assinaturas, nunca para publicações. Dois caracteres:
+casa exatamente um nível.home/+/temperaturacobre a temperatura de qualquer cômodo.#casa todos os níveis restantes e tem que ser o último caractere.home/#varre a casa inteira.- Tópicos iniciados com
$(ex.:$SYS/broker/...) são reservados para métricas do broker.#não casa — assine explicitamente. - MQTT 5 traz
$share/grupo/topicopara assinaturas compartilhadas — vários consumidores, uma entrega, igual consumer group do Kafka.
Estrutura recomendada
Convenções consolidadas no HiveMQ, EMQX e AWS IoT:
- Comece por uma constante — tenant, região, projeto. Regras de ACL ficam triviais.
- Mais específico primeiro dentro do domínio —
regiao/site/dispositivo/sensor/metricalê de cima para baixo e assina bem. - Sem barra inicial —
/foosão dois níveis (vazio + "foo"); confuso e desperdício. - Minúsculas, ASCII, sem espaço — tópicos são case-sensitive, e barra dentro de identificador quebra a hierarquia.
- Limite a profundidade em ~7 níveis — overhead, memória e complexidade de ACL crescem linearmente.
- Divisões clássicas:
tele/<device>/<metric>para telemetria,cmd/<device>/<acao>para comandos,status/<device>para heartbeat e LWT.
QoS, retain e o resto do protocolo
Três níveis de QoS equilibram confiabilidade e overhead: 0 fire-and-forget, 1 at-least-once (pode duplicar), 2 exactly-once (handshake de quatro passos, raramente vale). Retained messages entregam o último valor publicado a qualquer novo subscriber na hora — perfeito para estado atual. LWT (Last Will and Testament) publica uma mensagem de adeus quando o broker percebe que um cliente caiu — útil em status/<device>. O MQTT 5 acrescenta user properties, expiração de mensagem, topic aliases (comprime o nome do tópico no fio) e reason codes mais ricos.
Brokers, perfis e segurança
Brokers populares: Mosquitto (Eclipse, simples), HiveMQ (comercial, referência em MQTT 5), EMQX (altamente escalável, em cluster), VerneMQ, Amazon IoT Core, Azure IoT Hub. Perfis especializados: Sparkplug B para telemetria industrial (SCADA Ignition), Homie para dispositivos autodescritivos e MQTT-SN para transportes muito limitados (ZigBee, LoRa). No Brasil há frota MQTT em projetos de agro IoT (sensores de plantação) e smart city (Curitiba). Em produção rode sobre TLS na porta 8883 com certificados de cliente ou tokens OAuth — porta 1883 sem TLS é só para desenvolvimento.
Perguntas frequentes
Tópicos são case-sensitive? Sim. Home/Temp e home/temp são diferentes. Padronize em minúsculas.
Qual a profundidade máxima? A spec do MQTT permite até 65535 bytes; na prática 5-7 níveis é o ideal. Acima disso, ACL e revisão ficam caras.
Posso usar wildcard ao publicar? Não. + e # só valem para assinaturas. O tópico de publish tem que ser totalmente específico.
Como funcionam shared subscriptions? Só no MQTT 5. N consumidores assinam $share/workers/cmd/+ e cada mensagem vai para exatamente um deles — load balancing round-robin.
TCP puro ou TLS? Produção é TLS na 8883. 1883 puro só dentro de LAN confiável, senão credenciais e payload trafegam em claro.
Ferramentas Relacionadas
Gerador de Manuscrito
Converte texto digitado em uma imagem com aparência de letra manuscrita. Útil para tornar trabalhos digitais mais pessoais.
Gerador de Currículo
Preenche um currículo simples (CV) imprimível em A4 a partir de formulário com dados pessoais, formação e experiência.
Gerador de Favicon
Gera favicon a partir de texto/emoji em todos os tamanhos comuns (16, 32, 48, 64, 192, 512). Download como PNG.