Delphi-MQTT-Client — Verbindung zu jedem MQTT-3.1-/-5.0-Broker

Eine native MQTT-3.1.1- und MQTT-5.0-Client-Komponente für Delphi und C++Builder. Publish, Subscribe, Retained Messages, Last Will, QoS 0/1/2, TLS, Shared Subscriptions und die volle MQTT-5-Property-Oberfläche — verifiziert gegen HiveMQ, Mosquitto, EMQX, AWS IoT Core und Azure IoT Hub.

Ein erstklassiger MQTT-Client für Pascal

MQTT ist das De-facto-Messaging-Protokoll für IoT, Telemetrie, Mobile Push und vernetzte Fahrzeuge. Bring es in deine Delphi-Codebasis — ohne ein einziges Byte Framing zu schreiben.

Ein Delphi-MQTT-Client lässt deine VCL- oder FMX-Anwendung das OASIS-MQTT-Protokoll sprechen — das schlanke Publish/Subscribe-Protokoll, das für eingeschränkte Geräte und schmalbandige, latenzreiche Netzwerke entworfen wurde. Mit sgcWebSockets bekommst du die vollständige Client-Oberfläche als einzige nichtvisuelle Komponente TsgcWSPClient_MQTT, die von Delphi 7 bis Delphi 13 läuft — auf jeder Embarcadero-Zielplattform (Win32, Win64, Linux64, macOS, iOS, Android).

Die Komponente implementiert beide MQTT-Versionen im selben Codepfad: das lange ausgerollte MQTT 3.1.1 (OASIS-Standard, seit 2014 in praktisch jedem IoT-Broker) und das moderne MQTT 5.0 (mit Topic Aliases, Session Expiry, User Properties, Enhanced Authentication, Request/Response und Shared Subscriptions). Eine einzige Eigenschaft — Version — schaltet zwischen beiden um.

Komponenten-Klasse

TsgcWSPClient_MQTT

Transports

Natives TCP (1883 / 8883), WebSocket (80 / 443), TLS über OpenSSL oder SChannel

Versionen

MQTT 3.1.1 & MQTT 5.0

Plattformen

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

Funktioniert mit jedem MQTT-Broker, den wir testen

Ein spezifikationskonformer Client ist im Prinzip broker-agnostisch — aber reale Broker haben Eigenheiten. Wir testen jedes Release gegen die Broker, die unsere Kunden tatsächlich einsetzen.

HiveMQ & HiveMQ Cloud

Volle MQTT-5-Property-Oberfläche, Shared Subscriptions, Enhanced Auth und HiveMQ-Cluster. Der kostenlose Cloud-Tier ist der einfachste Weg, die Komponente Ende-zu-Ende auszuprobieren.

Eclipse Mosquitto

Der Open-Source-Referenz-Broker. Starte ihn lokal mit docker run -p 1883:1883 eclipse-mosquitto und hast in 30 Sekunden ein Entwicklungsziel.

EMQX

Massiv skalierender Erlang-Broker mit Rule Engine, Kafka-Bridges und Shared Subscriptions. Produktionsreif bei Millionen Verbindungen.

AWS IoT Core

X.509-Client-Zertifikate, ALPN-ausgehandeltes MQTT auf 443, SigV4-signierter WebSocket und die AWS-IoT-Broker-Quotas. Siehe die dedizierte Seite zu AWS IoT Core.

Azure IoT Hub

Geräte-SAS-Tokens, Twin-/Direct-Method-Topics, DPS-Provisionierung. Siehe die dedizierte Seite zum Azure IoT Hub.

Google Cloud IoT

JWT-basierte Geräteauthentifizierung auf Port 8883. Die Komponente erzeugt und rotiert das JWT automatisch.

RabbitMQ Web-MQTT

Das RabbitMQ-Web-MQTT-Plugin auf Port 15675 — derselbe Broker für Browser und Delphi-Clients über einen einzigen TLS-Port.

VerneMQ, ActiveMQ, Artemis

Bestehen alle die Integrationstest-Suite. Multiprotokoll-Koexistenz mit AMQP / STOMP / JMS frei Haus.

QoS, Retained, Will, TLS — die ganze Oberfläche

Jedes Wire-Level-MQTT-Feature ist als Eigenschaft, Methode oder Event freigegeben — nichts verborgen.

Quality of Service 0/1/2

Fire-and-Forget (QoS 0), At-Least-Once mit PUBACK (QoS 1) und Exactly-Once mit dem Vier-Wege-Handshake PUBREC → PUBREL → PUBCOMP (QoS 2). Pro Publish()-Aufruf wählbar.

Retained Messages

Markiere eine Publikation als retained, sodass der Broker den zuletzt bekannten Wert an jeden zukünftigen Subscriber liefert — das Standardmuster für „Current State“-Topics.

Last Will & Testament

LastWillTestament registriert ein Topic + Payload, das der Broker veröffentlicht, wenn der Client unsauber wegbricht — das kanonische Gerät-Offline-Signal.

Clean / persistente Sessions

Subscriptions und nicht ausgelieferte QoS-1/2-Nachrichten überleben Reconnects, wenn CleanSession false ist — überbrücke intermittierende Konnektivität ohne Datenverlust.

TLS & mTLS

MQTTS auf 8883 mit OpenSSL oder SChannel. Lade Zertifikate von der Festplatte, aus dem Windows-Zertifikatsspeicher, aus PKCS#12-Bundles oder von Hardware-Token.

WebSocket-Transport

Stecke die Komponente in einen TsgcWebSocketClient, um MQTT über WSS auf Port 443 zu fahren — durch jeden HTTP-bewussten Loadbalancer oder Firmen-Proxy hindurch.

MQTT-5-Properties

Session Expiry, Receive Maximum, Maximum Packet Size, Topic Alias Maximum, User Properties, Response Info — an jedem CONNECT / PUBLISH / SUBSCRIBE / DISCONNECT.

Shared Subscriptions

$share/<group>/<topic> verteilt eingehende Nachrichten per Round-Robin auf einen Worker-Pool — horizontale Skalierung kostenlos.

WatchDog-Reconnect

Automatischer Reconnect mit Exponential Back-Off; Subscriptions und gepufferte QoS-1/2-Publikationen werden beim Wiederaufbau ausgespielt.

Von null zur Publish-/Subscribe-Schleife

Komponente ablegen, zwei Events verdrahten, Active setzen.

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;

Authentifizierung & Transportsicherheit

Alle vier Broker-Authentifizierungsmuster werden out of the box unterstützt: einfache Benutzername-/Passwort-Anmeldung (im CONNECT-Paket), X.509-Client-Zertifikate (mTLS), JWT (Google Cloud IoT, eigene Broker) und SAS-Tokens (Azure IoT Hub). MQTT-5-Enhanced-Authentication gibt das AUTH-Paket über OnMQTTAuth für SCRAM-artige Challenge-/Response-Flows frei.

Beim Transport kannst du natives MQTT-over-TCP auf den Standard-Ports 1883 (Klartext) oder 8883 (TLS) fahren oder MQTT durch einen WebSocket tunneln (die Eigenschaft Client akzeptiert jeden TsgcWebSocketClient), um strikte HTTP-only-Firewalls und CDN-Edges zu durchqueren. Beide Optionen nutzen dieselbe Komponente und dieselben Events.

Mehr zu MQTT in sgcWebSockets

MQTT-Protokoll-Seite

Vollständige Referenz zu TsgcWSPClient_MQTT — Eigenschaften, Methoden, Events, alle Subprotokoll-Funktionen.

Cloud-IoT-Broker

Eigene Seiten für AWS IoT Core, Azure IoT Hub, Google Cloud IoT.

Echtzeit-Auswahl

Wann MQTT statt WebSocket, SSE, AMQP oder HTTP/2-Push wählen.

Blog: Request/Response über MQTT

MQTT 5 ResponseTopic + CorrelationData für asynchrone RPC nutzen.

Blog: AWS IoT mit SigV4

Signierte WebSocket-Authentifizierung gegen AWS IoT Core.

Blog: AWS IoT Custom Auth

Token-basierte Auth über den AWS-IoT-Custom-Authorizer.

In 5 Minuten zum ersten Publish

Hol dir die Testversion, zeige auf broker.hivemq.com:1883 und starte das mitgelieferte Demoprojekt.