MQTT-Protokoll

Nativer MQTT-3.1.1- und MQTT-5.0-Client für Delphi, C++Builder und .NET. Publish-Subscribe-Messaging über WebSocket oder reines TCP mit QoS 0/1/2, beibehaltenen Nachrichten, Last Will, Topic-Aliasen und gemeinsamen Abonnements.

MQTT-Subprotokoll-Client

Eine erstklassige MQTT-Implementierung, die überall dort läuft, wo die Delphi- bzw. .NET-Laufzeitumgebung läuft — von Desktop-Diensten bis zu Mobilgeräten und kommuniziert mit jedem standardkonformen MQTT-Broker.

Komponentenklasse

TsgcWSPClient_MQTT

Standards

MQTT 3.1.1 & MQTT 5.0

Plattformen

Windows, macOS, Linux, iOS, Android

Edition

Standard / Professional / Enterprise

Vollständiger MQTT-3.1.1- & -5.0-Funktionsumfang

Jedes Wire-Level-Feature von MQTT — nicht nur Publish und Subscribe.

QoS 0, 1 & 2

Fire-and-Forget-, At-least-once- und Exactly-once-Zustellung. Der vierstufige QoS-2-Handshake (PUBLISH → PUBREC → PUBREL → PUBCOMP) ist vollständig über Events für Retry- bzw. Audit-Logik zugänglich.

WebSocket oder reines TCP

Verbinden Sie die Eigenschaft Client mit einem TsgcWebSocketClient, um MQTT über WebSockets zu betreiben, oder nutzen Sie den nativen MQTT-TCP-Transport auf Port 1883 / 8883 — dieselbe Komponente, dieselbe API.

Beibehaltene Nachrichten

Markieren Sie Veröffentlichungen als beibehalten, damit der Broker den zuletzt bekannten Wert an jeden künftigen Abonnenten ausliefert. Setzen oder löschen Sie Retain pro Aufruf an Publish.

Last Will & Testament

LastWillTestament registriert ein Topic und einen Payload, die der Broker veröffentlicht, wenn der Client unvermittelt die Verbindung verliert — die kanonische Methode, um Device-Offline-Ereignisse zu signalisieren.

Wildcard-Abonnements

Topic-Filter mit den Wildcards + (eine Ebene) und # (mehrere Ebenen): sensors/+/temperature oder devices/#.

MQTT-5-Eigenschaften

Session Expiry, Receive Maximum, Maximum Packet Size, Topic Alias Maximum, Request Response Info, User Properties — allesamt zugänglich über ConnectProperties, PublishProperties und SubscribeProperties.

Topic-Aliase

MQTT 5 erlaubt es dem Client (und dem Broker), lange Topic-Namen bei wiederholten Veröffentlichungen durch einen 2 Byte langen Integer-Alias zu ersetzen — enorme Einsparungen bei gesprächigen Telemetriedatenströmen.

Gemeinsame Abonnements

MQTT-5-$share/<group>/<topic> verteilt eingehende Nachrichten per Round Robin auf eine Gruppe von Abonnenten — der Baustein für horizontale Worker-Pools.

Request / Response

Die MQTT-5-Eigenschaften ResponseTopic und CorrelationData machen aus Pub-Sub asynchronen RPC — direkt in die Events integriert, ohne zusätzlichen Framing-Aufwand.

Enhanced Auth

MQTT-5-AUTH-Paket mit AuthenticationMethod / AuthenticationData für SCRAM-artige Challenges — rufen Sie Auth auf und behandeln Sie OnMQTTAuth.

Keep-Alive & WatchDog

HeartBeat sendet PINGREQ in einem einstellbaren Intervall. Der WatchDog stellt die Verbindung automatisch mit exponentiellem Backoff wieder her und nimmt die Abonnements wieder auf.

TLS via OpenSSL oder SChannel

Betreiben Sie MQTTS auf Port 8883 (reines TCP+TLS) oder WSS auf Port 443 mit Client-Zertifikaten. TLSOptions.IOHandler wählt OpenSSL (plattformübergreifend) oder SChannel (Windows-Kernel-TLS).

Wo MQTT glänzt

Schlankes Framing, geringer Overhead und zustandsbehaftete Sessions machen MQTT zur Standardwahl für diese Szenarien.

IoT-Telemetrie

Sensoren streamen Temperatur-, Vibrations-, GPS- und Batteriewerte über MQTT-Sessions mit Keep-Alive — selbst über instabile LTE-/Cat-M-/NB-IoT-Verbindungen.

Vernetzte Fahrzeuge & Flotten

Bidirektionaler Befehlskanal mit QoS 1 für Flotten-Tracker, OBD-Gateways und EV-Ladestationen — Reconnect-and-Resume ohne Verlust von Veröffentlichungen.

Industrie / SCADA

Ersetzen Sie OPC-UA-Polling durch ereignisgesteuertes Publish-Subscribe. Topic-Aliase und gemeinsame Abonnements skalieren auf Tausende von PLCs und Feldgeräten.

Smart Home & Gebäude

Beleuchtung, HLK, Schlösser und Anwesenheitssensoren kommunizieren über Mosquitto oder Home Assistant — der Delphi-Client lässt sich genauso einfach integrieren wie jeder eingebettete Knoten.

Cloud-IoT-Plattformen

Dieselbe Komponente kommuniziert mit AWS IoT Core, Azure IoT Hub, Google Cloud IoT, IBM Watson, HiveMQ Cloud und EMQX — mit X.509-Client-Zertifikaten oder SAS-Tokens.

Web- / Browser-Dashboards

MQTT-over-WebSocket auf RabbitMQ Web-MQTT (Port 15675) ermöglicht es demselben Broker, über einen einzigen TLS-Port an Delphi-Clients und JS-Dashboards zu pushen.

Mobile Push & Presence

Langlebige MQTT-Sessions auf iOS/Android mit Last Will liefern Ihnen Presence und schlanken Push ohne herstellerspezifischen Anbieter.

Microservice-Fan-out

Entkoppeln Sie Producer und Consumer über einen zentralen Broker. Gemeinsame Abonnements verteilen die Arbeit per Round Robin auf einen Pool von Delphi-Worker-Diensten.

Funktioniert mit jedem großen MQTT-Broker

Spezifikationskonformer Client — verifiziert gegen die Broker, die unsere Kunden tatsächlich einsetzen.

AWS IoT Core

X.509-Client-Zertifikate, SigV4 über WebSocket und die Quotas des AWS-IoT-Brokers. Siehe die dedizierte Seite zu AWS IoT.

Azure IoT Hub

Device-SAS-Tokens, Twin-/Method-Topics und DPS-Provisionierung. Siehe die Seite Azure IoT Hub.

HiveMQ & HiveMQ Cloud

Vollständige MQTT-5-Property-Oberfläche, gemeinsame Abonnements, Enhanced Auth und HiveMQ Cluster.

Mosquitto

Der Referenz-Open-Source-Broker — sowohl MQTT 3.1.1 als auch 5.0, über TCP oder WebSocket.

EMQX

Massiv skalierbarer Broker mit gemeinsamen Abonnements, Rule Engine und Bridge zu Kafka. Drop-in.

RabbitMQ Web-MQTT

MQTT-over-WebSocket-Plugin auf Port 15675 — das Standardgespann für Browser- und Delphi-Dashboards.

VerneMQ

Clusterfähiger MQTT-Broker auf Basis von Erlang/OTP — sowohl der MQTT-3.1.1- als auch der 5.0-Modus besteht die Testsuite.

ActiveMQ & Artemis

Der eingebaute MQTT-Listener von Apache ActiveMQ und der Artemis-Broker — Multi-Protokoll-Koexistenz mit AMQP, STOMP und JMS.

Komponente einfügen, einige Eigenschaften setzen, loslegen

Kombinieren Sie einen TsgcWebSocketClient mit einem TsgcWSPClient_MQTT, verdrahten Sie OnMQTTConnect / OnMQTTPublish und führen Sie anschließend Subscribe und Publish aus.

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;

// Eine beibehaltene QoS-1-Nachricht veröffentlichen
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);

Spezifikationen & Referenzen

Maßgebliche Quellen für die von dieser Komponente implementierten Protokolle.

Dokumentation & Demos

Springen Sie direkt zur Komponentenreferenz, holen Sie sich das einsatzbereite Demoprojekt und laden Sie die Testversion herunter.

Online-Hilfe — Protocol_MQTT Vollständige Referenz zu Eigenschaften, Methoden und Events dieser Komponente.
Demoprojekt — Demos\Protocols\MQTT Einsatzbereites Beispielprojekt. Im sgcWebSockets-Paket enthalten — laden Sie unten die Testversion herunter.
Technisches Dokument (PDF) Funktionen, Schnellstart, Codebeispiele für Delphi, C++ Builder und .NET sowie Verweise auf Primärquellen — ausschließlich zu dieser Komponente.
Benutzerhandbuch (PDF) Ausführliches Handbuch zu allen Komponenten der Bibliothek.

Bereit, mit MQTT loszulegen?

Laden Sie die kostenlose Testversion herunter und entwickeln Sie in wenigen Minuten IoT-Messaging-Lösungen.