1001Ferramentas
📡 Geradores

Builder de Tópicos MQTT

Construtor de tópicos MQTT com wildcards + e #, valida hierarquia e sugere padrões (sparkplug B, homie 4).

Topic

    
Wildcards de subscribe equivalentes

    
+ casa um nível, # casa todos os níveis remanescentes (só no fim).

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/+/temperatura cobre 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/topico para 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ínioregiao/site/dispositivo/sensor/metrica lê de cima para baixo e assina bem.
  • Sem barra inicial/foo sã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