Protocolo MQTT

Cliente MQTT 3.1.1 e MQTT 5.0 nativo para Delphi, C++Builder e .NET. Mensageria publish-subscribe sobre WebSocket ou TCP puro com QoS 0/1/2, mensagens retidas, last will, aliases de tópico e assinaturas compartilhadas.

Cliente do subprotocolo MQTT

Uma implementação MQTT de primeira classe que roda em qualquer lugar onde o runtime Delphi / .NET roda — de serviços desktop a dispositivos móveis, conversando com qualquer broker MQTT em conformidade com o padrão.

Classe do componente

TsgcWSPClient_MQTT

Padrões

MQTT 3.1.1 & MQTT 5.0

Plataformas

Windows, macOS, Linux, iOS, Android

Edição

Standard / Professional / Enterprise

Superfície completa de MQTT 3.1.1 & 5.0

Todos os recursos de nível de protocolo do MQTT — não apenas publish e subscribe.

QoS 0, 1 & 2

Entrega fire-and-forget, ao-menos-uma-vez e exatamente-uma-vez. O handshake de quatro vias do QoS 2 (PUBLISH → PUBREC → PUBREL → PUBCOMP) é totalmente exposto via eventos para lógica de retentativa / auditoria.

WebSocket ou TCP puro

Conecte a propriedade Client a um TsgcWebSocketClient para executar MQTT sobre WebSockets, ou use o transporte TCP MQTT nativo na porta 1883 / 8883 — mesmo componente, mesma API.

Mensagens retidas

Marque publicações como retidas para que o broker entregue o último valor conhecido a qualquer assinante futuro. Defina ou limpe retain por chamada em Publish.

Last Will & Testament

LastWillTestament registra um tópico + payload que o broker publicará caso o cliente caia de forma abrupta — a maneira canônica de sinalizar eventos de dispositivo offline.

Assinaturas com curingas

Filtros de tópico com curingas + (nível único) e # (vários níveis): sensors/+/temperature ou devices/#.

Propriedades MQTT 5

Session expiry, receive maximum, maximum packet size, topic alias maximum, request response info, user properties — tudo acessível através de ConnectProperties, PublishProperties e SubscribeProperties.

Aliases de tópico

O MQTT 5 permite que o cliente (e o broker) substituam nomes longos de tópico por um alias inteiro de 2 bytes para publicações repetidas — uma enorme economia para streams de telemetria muito conversadoras.

Assinaturas compartilhadas

O $share/<group>/<topic> do MQTT 5 distribui mensagens recebidas em round-robin entre um grupo de assinantes — a base para pools de workers horizontais.

Request / response

As propriedades ResponseTopic e CorrelationData do MQTT 5 transformam pub-sub em RPC assíncrono — embutidas nos eventos sem framing extra.

Autenticação aprimorada

Pacote AUTH do MQTT 5 com AuthenticationMethod / AuthenticationData para desafios estilo SCRAM — chame Auth, trate OnMQTTAuth.

Keep-alive & WatchDog

HeartBeat envia PINGREQ em um intervalo ajustável. O WatchDog reconecta automaticamente com backoff exponencial e retoma as assinaturas.

TLS via OpenSSL ou SChannel

Execute MQTTS na 8883 (TCP puro+TLS) ou WSS na 443 com certificados de cliente. TLSOptions.IOHandler escolhe OpenSSL (multiplataforma) ou SChannel (TLS de kernel do Windows).

Onde o MQTT brilha

Framing leve, baixo overhead e sessões com estado tornam o MQTT a escolha padrão para estes cenários.

Telemetria de IoT

Sensores enviam leituras de temperatura, vibração, GPS e bateria por sessões MQTT com keep-alive — mesmo em links LTE/Cat-M/NB-IoT instáveis.

Veículos conectados & frotas

Canal de comando bidirecional com QoS 1 para rastreadores de frota, gateways OBD e estações de recarga de VEs — reconectar e retomar sem perder publicações.

Industrial / SCADA

Substitua o polling OPC-UA por publish-subscribe orientado a eventos. Aliases de tópico e assinaturas compartilhadas escalam para milhares de PLCs e dispositivos de campo.

Casa & prédio inteligente

Iluminação, HVAC, fechaduras e sensores de presença conversando através do Mosquitto ou Home Assistant — o cliente Delphi se integra com a mesma facilidade que qualquer nó embarcado.

Plataformas de IoT em nuvem

O mesmo componente conversa com AWS IoT Core, Azure IoT Hub, Google Cloud IoT, IBM Watson, HiveMQ Cloud e EMQX — com certificados X.509 de cliente ou tokens SAS.

Dashboards web / navegador

MQTT sobre WebSocket no Web-MQTT do RabbitMQ (porta 15675) permite que o mesmo broker envie mensagens a clientes Delphi e dashboards JS por uma única porta TLS.

Push & presença em mobile

Sessões MQTT de longa duração em iOS/Android com Last Will oferecem presença e push leve sem depender de um provedor específico do fabricante.

Fan-out de microsserviços

Desacople produtores e consumidores através de um broker central. Assinaturas compartilhadas distribuem o trabalho em round-robin por um pool de serviços worker Delphi.

Funciona com todos os principais brokers MQTT

Cliente em conformidade com a especificação — verificado contra os brokers que nossos clientes realmente usam em produção.

AWS IoT Core

Certificados X.509 de cliente, SigV4 sobre WebSocket e as cotas do broker AWS IoT. Veja a página dedicada de AWS IoT.

Azure IoT Hub

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

HiveMQ & HiveMQ Cloud

Superfície completa de propriedades MQTT 5, assinaturas compartilhadas, autenticação aprimorada e HiveMQ Cluster.

Mosquitto

O broker open-source de referência — tanto MQTT 3.1.1 quanto 5.0, por TCP ou WebSocket.

EMQX

Broker massivamente escalável com assinaturas compartilhadas, mecanismo de regras e ponte para Kafka. Drop-in.

RabbitMQ Web-MQTT

Plugin MQTT sobre WebSocket na porta 15675 — o pareamento padrão para dashboards em navegador + Delphi.

VerneMQ

Broker MQTT em cluster construído sobre Erlang/OTP — tanto o modo MQTT 3.1.1 quanto o 5.0 passam na suíte de testes.

ActiveMQ & Artemis

O listener MQTT embutido no Apache ActiveMQ e o broker Artemis — coexistência multi-protocolo com AMQP, STOMP e JMS.

Solte o componente, configure algumas propriedades, pronto

Combine um TsgcWebSocketClient com TsgcWSPClient_MQTT, ligue OnMQTTConnect / OnMQTTPublish e então Subscribe e Publish.

uses
  sgcWebSocket, sgcWebSocket_Protocol_MQTT_Client,
  sgcWebSocket_Protocol_MQTT_Message;

var
  WSClient: TsgcWebSocketClient;
  MQTT: TsgcWSPClient_MQTT;
begin
  WSClient := TsgcWebSocketClient.Create(nil);
  WSClient.Host := 'www.esegece.com';
  WSClient.Port := 15675;

  MQTT := TsgcWSPClient_MQTT.Create(nil);
  MQTT.Client := WSClient;
  MQTT.Authentication.Enabled  := True;
  MQTT.Authentication.UserName := 'sgc';
  MQTT.Authentication.Password := 'sgc';

  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/#');
end;

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

// Publica uma mensagem retida com QoS 1
MQTT.Publish('sensors/temperature/room1',
  '{"value":22.5,"unit":"C"}', mtqsAtLeastOnce, True);
// uses: sgcWebSocket, sgcWebSocket_Protocol_MQTT_Client
TsgcWebSocketClient *WSClient = new TsgcWebSocketClient(this);
WSClient->Host = "www.esegece.com";
WSClient->Port = 15675;

TsgcWSPClient_MQTT *MQTT = new TsgcWSPClient_MQTT(this);
MQTT->Client = WSClient;
MQTT->Authentication->Enabled  = true;
MQTT->Authentication->UserName = "sgc";
MQTT->Authentication->Password = "sgc";

MQTT->OnMQTTConnect = MQTTConnect;
MQTT->OnMQTTPublish = MQTTPublish;

WSClient->Active = true;

void __fastcall TForm1::MQTTPublish(TsgcWSConnection *Connection,
    UnicodeString aTopic, UnicodeString aText,
    TsgcWSMQTTPublishProperties PublishProperties)
{
  Memo1->Lines->Add(aTopic + ": " + aText);
}

MQTT->Publish("sensors/temperature/room1",
  "{\"value\":22.5,\"unit\":\"C\"}", mtqsAtLeastOnce, true);
using esegece.sgcWebSockets;

var WSClient = new TsgcWebSocketClient();
WSClient.Options.Parameters = "/ws";

var MQTT = new TsgcWSPClient_MQTT();
MQTT.Client = WSClient;
MQTT.Authentication.Enabled  = true;
MQTT.Authentication.UserName = "sgc";
MQTT.Authentication.Password = "sgc";
MQTT.HeartBeat.Enabled  = true;
MQTT.HeartBeat.Interval = 5;

MQTT.OnMQTTConnect += (conn, session, code, name, props) => MQTT.Subscribe("sensors/temperature/#");
MQTT.OnMQTTPublish += (conn, topic, text, props) => Console.WriteLine(topic + ": " + text);

WSClient.Host = "www.esegece.com";
WSClient.Port = 15675;
WSClient.Active = true;

MQTT.Publish("sensors/temperature/room1",
  "{\"value\":22.5,\"unit\":\"C\"}", TmqttQoS.mtqsAtLeastOnce, true);

Especificações & referências

Fontes autoritativas para os protocolos que este componente implementa.

Documentação & Demos

Acesse direto a referência do componente, baixe o projeto de demonstração pronto para rodar e faça o download da versão de avaliação.

Ajuda online — Protocol_MQTT Referência completa de propriedades, métodos e eventos deste componente.
Projeto de demonstração — Demos\Protocols\MQTT Projeto de exemplo pronto para rodar. Acompanha o pacote sgcWebSockets — baixe a versão de avaliação abaixo.
Documento técnico (PDF) Recursos, início rápido, exemplos de código para Delphi, C++ Builder e .NET e referências de fontes primárias — apenas deste componente.
Manual do usuário (PDF) Manual abrangente cobrindo todos os componentes da biblioteca.

Pronto para começar com MQTT?

Baixe a versão de avaliação gratuita e comece a criar soluções de mensageria IoT em minutos.