Fundamentos de MQTT

MQTT vs DDS: Mensageria Industrial com e sem Broker

O MQTT roteia por meio de um broker; o DDS permite que os pares se descubram e troquem dados tipados diretamente. Esta comparação aborda arquitetura, garantias de tempo real, uso em robótica versus IIoT e como fazer a ponte entre os dois.

Diagrama de controladores de robôs trocando dados ponto a ponto em uma rede local e um gateway publicando em um broker na nuvem, comparando MQTT vs DDS
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

MQTT vs DDS é uma questão que aparece em projetos de robótica, automotivos e de automação industrial, em que alguns sistemas precisam de determinismo na ordem de microssegundos em uma rede local e outros precisam levar dados de muitas unidades para a nuvem. Os dois são publish/subscribe, mas o MQTT depende de um broker central, enquanto o DDS permite que os participantes se descubram e troquem dados diretamente. Este guia compara as arquiteturas, as garantias de tempo real e as implantações típicas, e mostra onde o MQTT com broker até um serviço em nuvem é a escolha prática.

Duas Filosofias de Publish/Subscribe

O MQTT usa broker. Cada client abre uma conexão com um broker, publica em topics e assina filtros de topic, e o broker roteia cada mensagem. Os clients não sabem da existência uns dos outros. Isso torna a topologia de rede simples: os dispositivos só precisam de uma conexão de saída para um endpoint conhecido, o que funciona através de NAT, firewalls e redes celulares. Para relembrar o papel do broker, veja o que um broker MQTT faz.

O DDS (Data Distribution Service) é um padrão do Object Management Group para publish/subscribe centrado em dados e sem broker. Os participantes de um domínio DDS se descobrem, geralmente via UDP multicast na rede local, e trocam dados diretamente usando o protocolo de rede DDSI-RTPS. Os topics são fortemente tipados, com uma estrutura de dados definida em IDL, e cada reader e writer declara políticas de qualidade de serviço que o DDS casa automaticamente. O DDS é o middleware por baixo do ROS 2 e é comum em defesa, aeroespacial, dispositivos médicos e alguns sistemas automotivos e de energia.

MQTT vs DDS em Resumo

Aspecto MQTT DDS
Padrão OASIS MQTT 3.1.1 e 5.0 OMG DDS com protocolo de rede DDSI-RTPS
Arquitetura Broker central Sem broker, peer-to-peer dentro de um domínio
Descoberta Nenhuma; os clients conhecem o endereço do broker Descoberta automática de participantes e endpoints
Transporte TCP, TLS, WebSocket Principalmente UDP (unicast e multicast), além de memória compartilhada e TCP em algumas implementações
Modelo de dados String de topic mais payload opaco Topics tipados definidos em IDL, instâncias com chave
QoS 3 níveis de entrega, mais retained e sessões Muitas políticas: reliability, durability, history, deadline, liveliness, ownership e mais
Foco em latência Baixa, mas com um salto pelo broker Muito baixa, entrega direta entre pares
Escopo de rede LAN, WAN, internet, celular Principalmente LAN; WAN exige serviços de roteamento
Footprint Clients muito pequenos, rodam em microcontroladores Mais pesado; existem micro-perfis para alvos embarcados
Segurança TLS mais autenticação no broker Plugins DDS Security para autenticação, controle de acesso e criptografia
Ambiente típico Telemetria IIoT, unidades remotas, integração com a nuvem Robótica, veículos, sistemas de controle em tempo real

Arquitetura: Broker vs Barramento de Dados

O broker do MQTT é ao mesmo tempo uma força e um custo. Ele oferece um único lugar para autenticar clients, aplicar cotas, ver todos os topics e conectar a nuvem. Também adiciona um salto de rede e é um componente que precisa estar disponível. Um broker MQTT gerenciado transfere esse trabalho de disponibilidade para o provedor.

O DDS elimina o salto intermediário. Writers enviam diretamente para os readers compatíveis, o que reduz a latência e evita uma dependência central na rede local. O preço é a complexidade: o tráfego de descoberta cresce com o número de participantes e endpoints, o multicast precisa ser permitido na rede e atravessar sub-redes, NAT ou a internet exige serviços de roteamento adicionais. O DDS é excelente dentro de um robô, de um veículo ou de uma célula; é desajeitado entre centenas de unidades remotas.

Garantias de Tempo Real e QoS

O QoS do DDS é muito mais rico que o QoS do MQTT. Um writer DDS pode declarar que atualiza um topic pelo menos a cada 10 milissegundos (deadline), que quem chega depois deve receber as últimas N amostras (durability e history), que um reader deve ser notificado se um writer ficar em silêncio (liveliness) ou que apenas o writer de maior força deve ser ouvido (ownership, útil para sensores redundantes). O DDS casa readers e writers compatíveis e reporta incompatibilidades. Combinado com transportes UDP e de memória compartilhada, isso torna o DDS uma boa opção para malhas de controle e fusão de sensores.

O MQTT é mais simples. QoS 0, 1 e 2 definem as garantias de entrega, retained messages dão a quem chega depois o último valor, sessões persistentes guardam mensagens para assinantes offline e o Last Will sinaliza desconexões abruptas. O MQTT 5 adiciona a expiração de mensagens, que ajuda a descartar comandos obsoletos. Esses são os recursos de que a maioria das aplicações de telemetria e supervisão realmente precisa. Para relembrar, veja os níveis de QoS do MQTT explicados.

Nenhum dos protocolos torna um sistema hard real-time por si só. O determinismo também depende do sistema operacional, da rede e do hardware. Mas o DDS oferece o vocabulário para especificar o comportamento temporal, e o MQTT não tenta fazer isso.

Robótica vs IIoT

Na robótica, o ROS 2 tornou o DDS o padrão. Nós no mesmo robô ou na mesma rede local publicam dados de sensores, transformações e comandos entre si com baixa latência, e a descoberta permite iniciar os nós em qualquer ordem. É o DDS fazendo exatamente aquilo para que foi projetado.

No IoT industrial, os requisitos são outros. Os dados precisam fluir de PLCs, máquinas e gateways em muitas plantas para sistemas de supervisão, historiadores e aplicações em nuvem, atravessando firewalls e links WAN. Integradores esperam um Unified Namespace organizado pelos níveis do ISA-95, e muitos dispositivos já falam MQTT ou Sparkplug B. Aqui um broker é uma vantagem, porque dá a cada unidade uma única conexão de saída e um único lugar para procurar os dados. O guia de MQTT Sparkplug B e Unified Namespace explica esse modelo.

Ponte de DDS para MQTT: Um Exemplo com ROS 2

O padrão comum é DDS dentro da máquina e MQTT para fora. Um pequeno nó ROS 2 assina topics DDS locais e publica dados selecionados e subamostrados em um broker MQTT. O exemplo abaixo encaminha o estado da bateria de um robô para o ConnectMQ.

import json
import ssl
import time

import paho.mqtt.client as mqtt
import rclpy
from rclpy.node import Node
from sensor_msgs.msg import BatteryState


class BatteryToMqtt(Node):
    def __init__(self):
        super().__init__("battery_to_mqtt")
        self.last_sent = 0.0
        self.mqtt = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2,
                                client_id="YOUR_CLIENT_ID")
        self.mqtt.username_pw_set("YOUR_USERNAME", "YOUR_PASSWORD")
        self.mqtt.tls_set(cert_reqs=ssl.CERT_REQUIRED)
        self.mqtt.will_set("connectmq/site1/fleet/robot7/status", "offline",
                           qos=1, retain=True)
        self.mqtt.connect("broker.connectmq.com", 8883, keepalive=30)
        self.mqtt.loop_start()
        self.mqtt.publish("connectmq/site1/fleet/robot7/status", "online",
                          qos=1, retain=True)
        self.create_subscription(BatteryState, "/battery_state",
                                 self.on_battery, 10)

    def on_battery(self, msg: BatteryState):
        now = time.time()
        if now - self.last_sent < 5.0:  # subamostra para uma mensagem a cada 5 s
            return
        self.last_sent = now
        payload = json.dumps({
            "voltage": round(msg.voltage, 2),
            "percentage": round(msg.percentage, 3),
            "ts": int(now),
        })
        self.mqtt.publish("connectmq/site1/fleet/robot7/battery", payload,
                          qos=1, retain=True)


def main():
    rclpy.init()
    node = BatteryToMqtt()
    try:
        rclpy.spin(node)
    finally:
        node.mqtt.loop_stop()
        node.destroy_node()
        rclpy.shutdown()


if __name__ == "__main__":
    main()

Duas decisões de design tornam essa ponte robusta. Ela faz subamostragem, porque topics DDS podem rodar em taxas que não faz sentido enviar por uma WAN. E usa um Last Will retido, para que os dashboards da frota vejam o robô ficar offline mesmo que a ponte trave. Para um experimento rápido sem credenciais, conecte-se à porta 1883 com um client ID único e use um prefixo connectmq/demo/<random-id>/ no servidor MQTT público (gratuito), apenas com dados de teste.

Checklist de Decisão

  1. Os componentes precisam trocar dados em milissegundos na mesma máquina ou LAN, com QoS temporal rigoroso? Use DDS ali.
  2. Você precisa de dados de muitas unidades, através de NAT ou rede celular, na nuvem? Use MQTT nesse caminho.
  3. Seus dispositivos são microcontroladores, PLCs ou gateways comerciais? Muito provavelmente eles falam MQTT.
  4. Você está construindo sobre o ROS 2? Mantenha o DDS no robô e faça a ponte de topics selecionados para MQTT.
  5. Você precisa de um Unified Namespace ou de Sparkplug B? Isso é ecossistema MQTT.
  6. Você quer um único lugar para autenticar, monitorar e limitar clients? Esse é o trabalho de um broker.

Onde um Broker MQTT na Nuvem se Encaixa

Quando o mundo DDS precisa conversar com dashboards, historiadores, gêmeos digitais, apps móveis e outras unidades, um broker MQTT na nuvem é o ponto de encontro prático. O ConnectMQ oferece MQTT 3.1.1 e 5.0 sobre TLS, detecta topics ISA-95 e de Unified Namespace, decodifica Sparkplug B e mostra os dispositivos por nível ISA-95 em seu portal. Ele não fala DDS, então um nó de ponte como o mostrado acima é o caminho de integração honesto. Para mais contexto industrial, leia o guia de IoT industrial com MQTT e, para o básico do protocolo, o tutorial de MQTT.

Comece com o ConnectMQ

Mantenha o DDS onde o determinismo importa e envie a um broker MQTT gerenciado os dados de que o resto da empresa precisa. Crie um broker Serverless gratuito em app.connectmq.com, sem cartão de crédito, rode seu nó de ponte e veja os topics aparecerem no explorador ao vivo.

Perguntas frequentes

O DDS é mais rápido que o MQTT?

Em uma rede local, o DDS geralmente tem latência menor porque os dados vão diretamente do writer para o reader, sem passar por um broker. Em links WAN e pela internet essa vantagem diminui, e o MQTT é mais fácil de rotear.

O DDS funciona pela internet?

Não facilmente por conta própria, já que a descoberta depende de multicast local e de endereçamento direto entre pares. Existem serviços de roteamento e relays, mas a maioria das equipes prefere fazer a ponte de dados selecionados para MQTT.

O ROS 2 suporta MQTT?

O ROS 2 usa DDS por padrão. Você pode conectá-lo ao MQTT com um nó de ponte, seja um pacote da comunidade ou um pequeno nó personalizado como o exemplo deste artigo.

Devo usar DDS ou MQTT para IIoT?

Para telemetria da planta até a nuvem, dados de supervisão e arquiteturas de Unified Namespace, o MQTT costuma ser a melhor opção. O DDS é adequado para controle em tempo real dentro de máquinas e células.

Artigos relacionados

Por que Seu Cliente MQTT Fica Desconectando (e Como Corrigir)

Loops de reconexão estão entre os problemas mais comuns do MQTT. Conheça as cinco causas habituais, de client IDs duplicados a timeouts de keep alive e pacotes grandes demais, e siga um fluxo de diagnóstico que identifica a sua.

9 min de leitura

Quem Inventou o MQTT? A História dos Oleodutos à IoT

O MQTT foi inventado em 1999 por Andy Stanford-Clark, da IBM, e Arlen Nipper, da Arcom, para monitorar oleodutos via satélite. Acompanhe sua trajetória até o open source, a OASIS, a ISO e os brokers MQTT gerenciados na nuvem de hoje.

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.