Delphi MQTT-client — Verbind met elke MQTT 3.1 / 5.0-broker

Een native MQTT 3.1.1- en MQTT 5.0-clientcomponent voor Delphi en C++Builder. Publish, subscribe, retained messages, last will, QoS 0/1/2, TLS, shared subscriptions en het volledige MQTT 5-property-oppervlak — geverifieerd tegen HiveMQ, Mosquitto, EMQX, AWS IoT Core en Azure IoT Hub.

Een first-class MQTT-client voor Pascal

MQTT is het de-facto messaging-protocol voor IoT, telemetrie, mobile push en connected vehicles. Breng het naar je Delphi-codebase zonder een enkele byte framing te schrijven.

Een Delphi MQTT-client laat je VCL- of FMX-applicatie het OASIS MQTT-protocol spreken — het lichtgewicht publish/subscribe-protocol ontworpen voor beperkte apparaten en low-bandwidth, high-latency-netwerken. Met sgcWebSockets krijg je het complete client-oppervlak als een enkel niet-visueel component, TsgcWSPClient_MQTT, dat draait op Delphi 7 t/m Delphi 13 en op elk Embarcadero-doelplatform (Win32, Win64, Linux64, macOS, iOS, Android).

Het component implementeert beide grote MQTT-versies in hetzelfde code-pad: het al lang ingezette MQTT 3.1.1 (OASIS-standaard, gebruikt door vrijwel elke IoT-broker sinds 2014) en het moderne MQTT 5.0 (met topic-aliases, session expiry, user properties, enhanced authentication, request/response en shared subscriptions). Een enkele property — Version — schakelt tussen beide.

Componentklasse

TsgcWSPClient_MQTT

Transporten

Native TCP (1883 / 8883), WebSocket (80 / 443), TLS via OpenSSL of SChannel

Versies

MQTT 3.1.1 & MQTT 5.0

Platforms

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

Werkt met elke MQTT-broker waar we tegen testen

Een spec-conforme client is in principe broker-agnostisch — maar echte brokers hebben eigenaardigheden. We testen elke release tegen de brokers die onze klanten daadwerkelijk inzetten.

HiveMQ & HiveMQ Cloud

Volledig MQTT 5-property-oppervlak, shared subscriptions, enhanced auth en HiveMQ Cluster. De gratis Cloud-tier is de eenvoudigste manier om de component end-to-end te proberen.

Eclipse Mosquitto

De referentie-open-source-broker. Draai hem lokaal met docker run -p 1883:1883 eclipse-mosquitto en je hebt in 30 seconden een development-doel.

EMQX

Massaal schaalbare Erlang-broker met rule engine, Kafka-bridges en shared subscriptions. Productieklaar bij miljoenen verbindingen.

AWS IoT Core

X.509-client-certificaten, ALPN-onderhandelde MQTT op 443, SigV4-ondertekende WebSocket en de AWS IoT broker-quota. Zie de speciale AWS IoT Core-pagina.

Azure IoT Hub

Device SAS-tokens, twin- / direct-method-topics, DPS-provisioning. Zie de speciale Azure IoT Hub-pagina.

Google Cloud IoT

JWT-gebaseerde device-auth op poort 8883. Het component genereert en roteert de JWT automatisch.

RabbitMQ Web-MQTT

De RabbitMQ Web-MQTT-plugin op poort 15675 — zelfde broker voor browsers en Delphi-clients over een enkele TLS-poort.

VerneMQ, ActiveMQ, Artemis

Allemaal slagen voor de integratie-test-suite. Multi-protocol-coexistentie met AMQP / STOMP / JMS gratis.

QoS, retained, will, TLS — het volledige oppervlak

Elke wire-niveau MQTT-feature is blootgesteld als property, methode of event — niets begraven.

Quality of Service 0/1/2

Fire-and-forget (QoS 0), at-least-once met PUBACK (QoS 1) en exactly-once met de four-way handshake PUBREC → PUBREL → PUBCOMP (QoS 2). Kies per Publish()-aanroep.

Retained-messages

Markeer een publicatie als retained zodat de broker de laatst bekende waarde levert aan elke toekomstige subscriber — het standaardpatroon voor “current state”-topics.

Last Will & Testament

LastWillTestament registreert een topic + payload die de broker publiceert als de client ungracefully wegvalt — het canonieke device-offline-signaal.

Clean / persistente sessies

Subscriptions en niet-bezorgde QoS 1/2-berichten persisteren over reconnects wanneer CleanSession false is — overbrug intermitterende connectiviteit zonder data te verliezen.

TLS & mTLS

MQTTS op 8883 met OpenSSL of SChannel. Laad certificaten van disk, de Windows-certificaatopslag, PKCS#12-bundels of hardware-tokens.

WebSocket-transport

Plug het component in op een TsgcWebSocketClient om MQTT over WSS op poort 443 te draaien — door elke HTTP-bewuste load balancer of corporate proxy.

MQTT 5-properties

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

Shared subscriptions

$share/<group>/<topic> round-robint binnenkomende berichten over een pool van workers — horizontale schaling gratis.

WatchDog-reconnect

Automatische reconnect met exponentiele backoff; subscriptions en wachtende QoS 1/2-publicaties worden bij hervatten opnieuw afgespeeld.

Van nul naar een publish/subscribe-loop

Plaats het component, verbind twee events, zet 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;

Authenticatie & transportbeveiliging

Alle vier broker-authenticatie-patronen worden out-of-the-box ondersteund: simpele username/password (verstuurd in het CONNECT-pakket), X.509-client-certificaten (mTLS), JWT (Google Cloud IoT, custom brokers) en SAS-tokens (Azure IoT Hub). MQTT 5 enhanced authentication stelt het AUTH-pakket bloot via OnMQTTAuth voor SCRAM-stijl challenge/response-flows.

Voor transport kun je native MQTT-over-TCP draaien op de standaard 1883 (clear) of 8883 (TLS) poorten, of MQTT door een WebSocket tunnelen (de Client-property accepteert elke TsgcWebSocketClient) om strikte HTTP-only-firewalls en CDN-edges te doorkruisen. Beide opties gebruiken hetzelfde component en dezelfde events.

Meer over MQTT in sgcWebSockets

MQTT-protocol-pagina

Volledige referentie voor TsgcWSPClient_MQTT — properties, methodes, events, alle subprotocol-features.

Cloud-IoT-brokers

Speciale pagina’s voor AWS IoT Core, Azure IoT Hub, Google Cloud IoT.

Real-time-picker

Wanneer voor MQTT kiezen boven WebSocket, SSE, AMQP of HTTP/2-push.

Blog: Request/response over MQTT

MQTT 5 ResponseTopic + CorrelationData gebruiken voor asynchrone RPC.

Blog: AWS IoT met SigV4

Ondertekende WebSocket-auth tegen AWS IoT Core.

Blog: AWS IoT custom auth

Token-gebaseerde auth via de AWS IoT custom authoriser.

Begin in 5 minuten met publiceren

Pak de proefversie, wijs naar broker.hivemq.com:1883 en draai het meegeleverde demo-project.