Cliente MQTT Delphi — conecte a qualquer broker MQTT 3.1 / 5.0

Um componente cliente MQTT 3.1.1 e MQTT 5.0 nativo para Delphi e C++Builder. Publique, assine, mensagens retidas, last will, QoS 0/1/2, TLS, assinaturas compartilhadas e a superfície completa de propriedades do MQTT 5 — verificado contra HiveMQ, Mosquitto, EMQX, AWS IoT Core e Azure IoT Hub.

Um cliente MQTT de primeira classe para Pascal

MQTT é o protocolo de mensageria de fato para IoT, telemetria, push móvel e veículos conectados. Traga para sua base Delphi sem escrever um único byte de framing.

Um cliente MQTT Delphi deixa sua aplicação VCL ou FMX falar o protocolo OASIS MQTT — o protocolo publish/subscribe leve projetado para dispositivos restritos e redes de baixa largura de banda e alta latência. Com o sgcWebSockets, você ganha a superfície completa do cliente como um único componente não visual, TsgcWSPClient_MQTT, que roda do Delphi 7 ao Delphi 13 e em todas as plataformas alvo da Embarcadero (Win32, Win64, Linux64, macOS, iOS, Android).

O componente implementa ambas as versões principais do MQTT no mesmo caminho de código: o MQTT 3.1.1, há muito implantado (padrão OASIS, usado por praticamente todo broker IoT desde 2014) e o moderno MQTT 5.0 (com topic aliases, expiração de sessão, user properties, autenticação aprimorada, request/response e shared subscriptions). Uma única propriedade — Version — alterna entre eles.

Classe de componente

TsgcWSPClient_MQTT

Transportes

TCP nativo (1883 / 8883), WebSocket (80 / 443), TLS via OpenSSL ou SChannel

Versões

MQTT 3.1.1 & MQTT 5.0

Plataformas

Windows, macOS, Linux, iOS, Android, .NET

Funciona com todo broker MQTT que testamos

Um cliente em conformidade com a spec é, em princípio, broker-agnostic — mas brokers do mundo real têm peculiaridades. Testamos cada release contra os brokers que nossos clientes de fato implantam.

HiveMQ & HiveMQ Cloud

Superfície completa de properties MQTT 5, shared subscriptions, enhanced auth e HiveMQ Cluster. O tier Cloud gratuito é a forma mais fácil de testar o componente de ponta a ponta.

Eclipse Mosquitto

O broker open-source de referência. Rode localmente com docker run -p 1883:1883 eclipse-mosquitto e você tem um alvo de desenvolvimento em 30 segundos.

EMQX

Broker em Erlang massivamente escalável, com rule engine, bridges Kafka e shared subscriptions. Pronto para produção em milhões de conexões.

AWS IoT Core

Certificados de cliente X.509, MQTT negociado por ALPN na 443, WebSocket assinado em SigV4 e as cotas do broker AWS IoT. Veja a página dedicada do AWS IoT Core.

Azure IoT Hub

Tokens SAS de dispositivo, tópicos de twin / direct-method, provisionamento via DPS. Veja a página dedicada do Azure IoT Hub.

Google Cloud IoT

Auth de dispositivo baseada em JWT na porta 8883. O componente gera e rotaciona o JWT automaticamente.

RabbitMQ Web-MQTT

O plugin Web-MQTT do RabbitMQ na porta 15675 — mesmo broker para navegadores e clientes Delphi sobre uma única porta TLS.

VerneMQ, ActiveMQ, Artemis

Todos passam na suite de testes de integração. Coexistência multi-protocolo com AMQP / STOMP / JMS de graça.

QoS, retained, will, TLS — a superfície completa

Todo recurso MQTT em nível de fio é exposto como propriedade, método ou evento — nada escondido.

Quality of Service 0/1/2

Fire-and-forget (QoS 0), at-least-once com PUBACK (QoS 1) e exactly-once com o handshake de quatro vias PUBREC → PUBREL → PUBCOMP (QoS 2). Escolha por chamada de Publish().

Mensagens retidas

Marque uma publicação como retained para que o broker entregue o último valor conhecido a qualquer assinante futuro — o padrão para tópicos de “estado atual”.

Last Will & Testament

LastWillTestament registra um tópico + payload que o broker publica se o cliente cair sem grace — o sinal canônico de dispositivo offline.

Sessões clean / persistentes

Assinaturas e mensagens QoS 1/2 não entregues persistem entre reconexões quando CleanSession é false — supere conectividade intermitente sem perder dados.

TLS & mTLS

MQTTS na 8883 com OpenSSL ou SChannel. Carregue certificados do disco, do Windows certificate store, de bundles PKCS#12 ou de tokens em hardware.

Transporte WebSocket

Pluge o componente em um TsgcWebSocketClient para rodar MQTT sobre WSS na porta 443 — passe por qualquer load balancer HTTP-aware ou proxy corporativo.

Properties MQTT 5

Session expiry, receive maximum, maximum packet size, topic alias maximum, user properties, response info — em cada CONNECT / PUBLISH / SUBSCRIBE / DISCONNECT.

Shared subscriptions

$share/<group>/<topic> faz round-robin das mensagens entrantes em um pool de workers — escalabilidade horizontal de graça.

Reconexão via WatchDog

Reconexão automática com backoff exponencial; assinaturas e publicações QoS 1/2 enfileiradas são repetidas no retorno.

Do zero a um loop publish/subscribe

Arraste o componente, conecte dois eventos, defina Active.

uses
  sgcWebSocket, sgcWebSocket_Protocol_MQTT_Client,
  sgcWebSocket_Protocol_MQTT_Message;

var
  WSClient: TsgcWebSocketClient;
  MQTT: TsgcWSPClient_MQTT;
begin
  WSClient := TsgcWebSocketClient.Create(nil);
  WSClient.Host := 'broker.hivemq.com';
  WSClient.Port := 1883;
  WSClient.WatchDog.Enabled := True;

  MQTT := TsgcWSPClient_MQTT.Create(nil);
  MQTT.Client  := WSClient;
  MQTT.Version := mqtt50;
  MQTT.LastWillTestament.Enabled := True;
  MQTT.LastWillTestament.Topic   := 'devices/sensor-01/status';
  MQTT.LastWillTestament.Message := 'offline';
  MQTT.LastWillTestament.QoS     := mtqsAtLeastOnce;
  MQTT.LastWillTestament.Retain  := True;

  MQTT.OnMQTTConnect := MQTTConnect;
  MQTT.OnMQTTPublish := MQTTPublish;

  WSClient.Active := True;
end;

procedure TForm1.MQTTConnect(Connection: TsgcWSConnection;
  const Session: Boolean; const ReasonCode: Integer;
  const ReasonName: string;
  const ConnectProperties: TsgcWSMQTTCONNACKProperties);
begin
  MQTT.Subscribe('sensors/+/temperature', mtqsAtLeastOnce);

  // Retained “online” message
  MQTT.Publish('devices/sensor-01/status',
    'online', mtqsAtLeastOnce, True);
end;

procedure TForm1.MQTTPublish(Connection: TsgcWSConnection;
  aTopic, aText: string;
  PublishProperties: TsgcWSMQTTPublishProperties);
begin
  Memo1.Lines.Add(aTopic + ' = ' + aText);
end;

Autenticação & segurança de transporte

Todos os quatro padrões de autenticação de broker são suportados de fábrica: usuário/senha simples (enviado dentro do pacote CONNECT), certificados de cliente X.509 (mTLS), JWT (Google Cloud IoT, brokers customizados) e tokens SAS (Azure IoT Hub). A autenticação aprimorada do MQTT 5 expõe o pacote AUTH via OnMQTTAuth para fluxos de challenge/response no estilo SCRAM.

Para transporte, você pode rodar MQTT-sobre-TCP nativo nas portas padrão 1883 (clara) ou 8883 (TLS), ou tunelar MQTT por um WebSocket (a propriedade Client aceita qualquer TsgcWebSocketClient) para atravessar firewalls estritos só-HTTP e edges de CDN. Ambas as opções usam o mesmo componente e os mesmos eventos.

Mais sobre MQTT no sgcWebSockets

Página do protocolo MQTT

Referência completa do TsgcWSPClient_MQTT — propriedades, métodos, eventos, todos os recursos de subprotocolo.

Brokers IoT em nuvem

Páginas dedicadas para AWS IoT Core, Azure IoT Hub, Google Cloud IoT.

Picker de tempo real

Quando escolher MQTT em vez de WebSocket, SSE, AMQP ou HTTP/2 push.

Blog: request/response sobre MQTT

Usando ResponseTopic + CorrelationData do MQTT 5 para RPC assíncrono.

Blog: AWS IoT com SigV4

Auth de WebSocket assinada contra AWS IoT Core.

Blog: AWS IoT custom auth

Auth baseada em token via o custom authoriser do AWS IoT.

Comece a publicar em 5 minutos

Pegue o trial, aponte para broker.hivemq.com:1883 e rode o projeto demo incluído.