MQTT gerenciado na nuvem

Limitações de Broker MQTT Público que Você Precisa Conhecer Antes de Construir

Brokers públicos de testes são fantásticos para aprender e fazer demonstrações, mas têm restrições reais. Entenda privacidade, confiabilidade, topics compartilhados e limites de taxa, como projetar dentro deles e os sinais de que chegou a hora de um broker privado.

Ilustração das limitações de um broker MQTT público, mostrando muitos clientes anônimos compartilhando um espaço de topics aberto, com medidores de taxa e tamanho
Rode isso no seu próprio broker MQTTTenha um broker MQTT privado e gerenciado no plano Free e comece com exemplos de código prontos.
Teste grátis Exemplos de código Sem cartão de crédito

As limitações de um broker MQTT público são fáceis de ignorar na primeira hora empolgante de um projeto e dolorosas de descobrir na frente de um cliente. Este artigo explica as quatro principais restrições dos brokers públicos de testes, usando o servidor MQTT público da ConnectMQ, broker.connectmq.com, como exemplo concreto, mostra como projetar os seus testes para funcionar dentro delas e lista os sinais claros de que chegou a hora de migrar para um broker privado.

Por que brokers públicos têm limites

Um broker público é um serviço compartilhado e anônimo. Qualquer pessoa na internet pode se conectar, publicar e assinar sem conta. Essa abertura é exatamente o que o torna útil para tutoriais e testes rápidos, e exatamente o motivo pelo qual ele precisa de limites: sem eles, um único script com problema poderia inundar o broker e arruiná-lo para todos os outros.

Os limites não são um defeito. São eles que mantêm utilizável um serviço comunitário gratuito. A ConnectMQ mantém o broker.connectmq.com exatamente com esse propósito: um lugar sem configuração para aprender MQTT, testar uma biblioteca ou mostrar uma demonstração, ao lado de brokers privados para cargas de trabalho reais. O artigo sobre o servidor MQTT público (gratuito) descreve como usar o broker.connectmq.com com eficiência; este artigo foca no que ele não consegue fazer.

Limitação 1: nenhuma privacidade

Em um broker público, todo topic pode ser lido por todo cliente. Quem assina # recebe tudo o que é publicado, sujeito às proteções do próprio broker. Nomes de topics não são segredos, e prefixos obscuros apenas reduzem colisões acidentais.

Na prática, isso significa:

  • Nunca publique dados pessoais, rastros de localização, imagens de câmeras ou qualquer coisa que identifique uma pessoa ou uma casa; no Brasil, isso também esbarra nas obrigações da LGPD.
  • Nunca publique credenciais, chaves de API ou senhas de Wi-Fi, nem "temporariamente".
  • Nunca controle equipamentos reais a partir de um topic público. Qualquer pessoa pode publicar no seu topic de comandos, e não apenas lê-lo.
  • Presuma que os payloads são registrados por alguém, em algum lugar.

Use um prefixo aleatório como connectmq/demo/9b2e7/ para que o seu tráfego de teste não colida com o de outras pessoas. É uma cortesia e uma conveniência, não uma medida de segurança.

Limitação 2: nenhuma garantia de serviço

Brokers públicos são oferecidos como serviço de melhor esforço. Não há SLA, uptime garantido nem compromisso de suporte. O broker pode reiniciar para manutenção, os limites podem mudar e as sessões não sobrevivem além da janela de expiração. No broker.connectmq.com, a expiração de sessão é limitada a 30 minutos, então um dispositivo que fica offline por mais tempo começa do zero.

Para uma demonstração ou um workshop, tudo bem. Para um produto, um piloto ou qualquer coisa da qual um cliente dependa, não.

Planeje para o silêncio

Como não há garantias, escreva os seus clientes de teste para lidar com interrupções. Ative a reconexão automática, refaça as assinaturas no callback de conexão em vez de uma única vez na inicialização e não trate uma mensagem ausente como bug no seu próprio código até descartar um reinício do broker. Esses hábitos são boas práticas em qualquer broker e tornam mais tranquila a migração posterior para produção.

Limitação 3: um espaço de topics compartilhado

Todos os usuários públicos compartilham uma única árvore de topics. As consequências incluem:

  • Colisões. Nomes populares como test, sensor/temp ou home/livingroom são usados por muita gente. Você vai receber as mensagens dessas pessoas, e elas, as suas.
  • Surpresas com retained messages. A retained message de outra pessoa em um topic genérico aparece no instante em que você assina.
  • Ruído de curingas. Assinar de forma ampla retorna tráfego que você nunca pediu e desperdiça a sua cota de taxa.

Sempre coloque os topics sob um prefixo único e assine de forma restrita.

Limitação 4: limites de taxa, tamanho e assinaturas

O servidor MQTT público da ConnectMQ limita os recursos por cliente para que todos tenham acesso justo. Em broker.connectmq.com, os limites são:

Limite Valor no servidor MQTT público Por que existe
Tamanho da mensagem 64 KB por mensagem Evita que payloads grandes dominem a banda
Taxa de publicação 10 mensagens por segundo por cliente Impede que scripts inundem o broker
Assinaturas 10 por cliente Limita o custo de fan-out por cliente
Profundidade do topic 8 níveis de topic Mantém a correspondência de topics eficiente
QoS 0, 1 e 2 Comportamento completo do protocolo para aprendizado
Expiração de sessão Até 30 minutos Libera recursos de sessões abandonadas
Autenticação Anônima, qualquer client ID único e não vazio Zero configuração para quem está aprendendo

Exceder um limite pode resultar em operações rejeitadas ou em desconexão. Se você se conectar com MQTT 5, registre os reason codes que o seu cliente recebe; eles dizem muito mais do que um genérico "connection lost".

Projetando testes que respeitam os limites

Aqui está um publicador Python (paho-mqtt 2.x) que fica bem dentro dos limites públicos: client ID único, prefixo único, topics rasos, limite de taxa e payloads compactos.

import json
import random
import time
import uuid
import paho.mqtt.client as mqtt

RUN_ID = uuid.uuid4().hex[:6]
PREFIX = f"connectmq/demo/{RUN_ID}"          # 3 níveis, deixa espaço abaixo
MAX_RATE = 5                                 # mensagens por segundo, abaixo do limite de 10/s
INTERVAL = 1.0 / MAX_RATE


def on_connect(client, userdata, flags, reason_code, properties):
    print("Connected:", reason_code, "prefix:", PREFIX)


def on_disconnect(client, userdata, flags, reason_code, properties):
    print("Disconnected:", reason_code)


client = mqtt.Client(
    mqtt.CallbackAPIVersion.VERSION2,
    client_id=f"limits-demo-{RUN_ID}",
    protocol=mqtt.MQTTv5,
)
client.on_connect = on_connect
client.on_disconnect = on_disconnect
client.connect("broker.connectmq.com", 1883, keepalive=60)
client.loop_start()

try:
    for i in range(50):
        payload = json.dumps({"i": i, "t": round(20 + random.random() * 2, 2)})
        assert len(payload.encode()) < 64 * 1024
        client.publish(f"{PREFIX}/sensor/temp", payload, qos=1)
        time.sleep(INTERVAL)
finally:
    client.loop_stop()
    client.disconnect()

Acompanhe a partir de um segundo terminal, assinando de forma restrita apenas o seu próprio prefixo:

mosquitto_sub -h broker.connectmq.com -p 1883 -i watch-RUNID -t "connectmq/demo/RUNID/#" -v

Substitua RUNID pelo prefixo exibido pelo script.

Armadilhas comuns

  1. Client ID vazio. O servidor MQTT público exige um client ID não vazio. Gere um único a cada execução.
  2. Dois scripts com o mesmo client ID. Cada conexão derruba a outra, gerando um loop de reconexões.
  3. Loops de publicação apertados. Um while True sem sleep excede o limite de taxa em um segundo.
  4. Árvores de topics profundas. connectmq/demo/abc/site/area/line/cell/machine/sensor tem 9 níveis e excede o limite de 8. Achate os topics de teste.
  5. JSON grande ou imagens. Qualquer coisa perto de 64 KB pertence a um broker privado, e imagens raramente pertencem ao MQTT.

Sinais de que chegou a hora de um broker privado

Saia do servidor MQTT público assim que notar qualquer um destes sinais:

  • Os dados constrangeriam ou prejudicariam alguém se um estranho os lesse.
  • Um dispositivo executa os comandos que recebe, como uma bomba de irrigação numa fazenda ou uma válvula numa estação de saneamento.
  • Um cliente, colega ou professor depende de o sistema funcionar amanhã.
  • Você precisa de mais de 10 assinaturas por cliente, mensagens maiores ou hierarquias de topics mais profundas.
  • Você quer ver quem está conectado e manter credenciais por dispositivo.

A comparação broker MQTT público vs. privado mostra a troca passo a passo, e do protótipo à produção cobre o restante da jornada.

O que muda em um plano privado

Um broker MQTT gerenciado privado da ConnectMQ mantém o mesmo protocolo e o mesmo código de cliente, mas muda as regras:

  • Autenticação com usuário, senha e client ID gerados, com o client ID vinculado a essas credenciais.
  • Isolamento dos outros tenants, para que o espaço de topics seja só seu.
  • TLS na 8883 e Secure WebSocket na 8084 com certificado Let's Encrypt.
  • Limites por plano: o plano Serverless gratuito permite até 25 conexões, QoS até 1 e mensagens de 256 KB; o plano Serverless pago eleva isso para até 1.000 conexões, QoS 2, mensagens de 1 MB e shared subscriptions.
  • Ferramentas do portal, como cliente no navegador, explorador de topics ao vivo, dashboard e alertas por limite.

Migre para um broker privado da ConnectMQ gratuitamente

Quando o servidor MQTT público tiver cumprido o seu papel, crie o seu broker privado gratuito no plano Serverless, sem cartão de crédito, e aponte o mesmo script para a porta 8883 com as novas credenciais. Leia o guia de broker MQTT na nuvem para planejar os próximos passos, veja por que um broker MQTT gerenciado poupa esforço de operação ou visite connectmq.com para comparar os planos.

Perguntas frequentes

É seguro usar um broker MQTT público?

É seguro para aprendizado e demonstrações com dados inofensivos. Não é seguro para dados pessoais, credenciais ou controle de equipamentos reais, porque qualquer pessoa pode ler e publicar em qualquer topic.

O que acontece se eu exceder o limite de taxa do servidor MQTT público?

As operações podem ser rejeitadas ou o cliente desconectado. Mantenha a publicação abaixo de 10 mensagens por segundo por cliente e verifique os reason codes do MQTT 5 ao depurar.

Por que recebo mensagens que eu não publiquei?

Outros usuários publicam nos mesmos nomes de topic. Use um prefixo único como connectmq/demo/<random-id>/ e assine apenas esse prefixo.

O servidor MQTT público mantém a minha sessão se o meu dispositivo ficar offline?

Apenas dentro da janela de expiração de sessão, que é limitada a 30 minutos no broker.connectmq.com. Depois disso, o dispositivo começa uma sessão nova.

Artigos relacionados

Broker MQTT BYOC: Bring Your Own Cloud Explicado

Um broker MQTT BYOC roda na sua conta de nuvem, mas é operado por um provedor. Entenda como o modelo funciona, a divisão de responsabilidades e como preparar a sua conta para ele.

9 min de leitura

Alternativa ao Google Cloud IoT Core: Opções e Migração Após o Encerramento

O Google desativou o Cloud IoT Core em agosto de 2023. Este guia compara as alternativas realistas, mapeia os conceitos do IoT Core para MQTT puro e mostra como mover dispositivos para um broker MQTT gerenciado mantendo os dados fluindo para o Google Cloud.

9 min de leitura

Mensagens MQTT por Segundo: Como Estimar e Medir a Vazão

O planejamento de vazão em MQTT se resume a algumas fórmulas e a uma medição honesta. Aprenda a estimar mensagens de entrada e saída por segundo, considerar os picos e associar o resultado a um plano de broker.

8 min de leitura

Todos os artigos →

Seu broker MQTT privado está a poucos cliques de distância

Crie uma conta, receba as credenciais do seu broker e conecte seu primeiro dispositivo — sem servidores para instalar, atualizar ou escalar.