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
OKR Builder (1 Objetivo + 3 KR)
Monta OKR formatado: 1 objetivo qualitativo + 3 key results quantitativos.
Builder de SSML (Speech)
Monte documentos SSML (Speech Synthesis Markup) compatíveis com Alexa, Google e Polly com tags break, prosody, emphasis, phoneme e voice.
Builder de arquivo .netrc
Monta um arquivo ~/.netrc (curl, ftp, git credential) com múltiplas entradas 'machine HOST', login, password e account opcional, mais entrada 'default' única. Avisa sobre passwords com '#' ou espaço (que quebram o parser) e relembra chmod 600.