sgcMQ Jeder Broker, ein Träger. Keine DLL zum Ausliefern.

Sieben Client-Komponenten sprechen MQTT 3.1.1 und 5.0, AMQP 0.9.1, AMQP 1.0, das Apache-Kafka-Wire-Protokoll und STOMP 1.0 bis 1.2, mit Broker-Dialekten für RabbitMQ und ActiveMQ. Jeder Frame wird in Object Pascal innerhalb der Bibliothek geparst und geschrieben, es gibt also kein librdkafka, kein Paho, kein Qpid und keine DLL zum Ausliefern. Alle sieben laufen über einen einzigen TsgcTCPClient, unverschlüsselt geöffnet oder in TLS verpackt.

Ein einzelnes Package von sgcWebSockets. Preise ansehen →
  • MQTT 3.1.1 & 5.0
  • AMQP 0.9.1
  • AMQP 1.0
  • Apache Kafka
  • STOMP 1.0 bis 1.2
  • Delphi 7 bis 13
  • C++ Builder
  • 7Client-Komponenten auf einer Palettenseite
  • 5Protokollfamilien, jede in Object Pascal geparst
  • 6Zielplattformen: Win32, Win64, Linux64, macOS, iOS, Android
  • 0Externe Bibliotheken: kein librdkafka, Paho, Qpid und keine DLL
  • 1Transport-Träger für alle sieben Komponenten
Ein API-Stil

Eine Komponente pro Protokoll. Dieselbe Form für alle sieben.

Zieh die Protokollkomponente auf ein Formular, weise einen TsgcTCPClient ihrer Client-Eigenschaft zu, verdrahte die Ereignisse und rufe dann die eigenen Verben des Protokolls auf. Die Benennung ist über alle sieben hinweg konsistent, wer eine gelernt hat, ist bei den übrigen schon fast am Ziel.

Ein Muster für jeden Broker: ein TsgcTCPClient, über die Eigenschaft Client an eine Protokollkomponente angeschlossen, über reines TCP oder TLS

Ein TCP-Client plus eine Protokollkomponente

Der TsgcTCPClient besitzt den Socket, den Host und den Port. Die Protokollkomponente hängt sich über ihre Client-Eigenschaft ein und spricht obendrauf MQTT, AMQP, Kafka oder STOMP. Der Wechsel von einem unverschlüsselten Listener zu einem verschlüsselten ist eine Portnummer und TLS := True am Träger, und darüber ändert sich nichts.

Verbindung zu einem MQTT-Broker: der Delphi-Code neben dem CONNECT- und CONNACK-Austausch

Verbunden in wenigen Zeilen

Richte den Träger auf deinen Broker aus, hänge TsgcWSPClient_MQTT an, wähle mit einer einzigen MQTTVersion-Eigenschaft Version 5 oder 3.1.1 und setze Active auf True. Das ist die ganze Verbindung.

MQTT Quality of Service 0, 1 und 2 mit dem PUBLISH-, PUBACK-, PUBREC-, PUBREL- und PUBCOMP-Austausch

Die gesamte QoS-Maschinerie, als Ereignisse sichtbar

QoS 0, 1 und 2, wobei der PUBACK-, PUBREC-, PUBREL- und PUBCOMP-Austausch als Ereignisse sichtbar wird, statt versteckt zu bleiben. Retained Messages, Last Will and Testament, Wildcard-Subscriptions und wiederaufnehmbare Sessions sind mit dabei.

Produktionseinstellungen am TCP-Client: WatchDog, HeartBeat und TLS, mit Authentifizierung an der Protokollkomponente

Produktionseinstellungen liegen am Träger

WatchDog verbindet nach einer abgebrochenen Verbindung neu, der Heartbeat hält sie am Leben und TLS verschlüsselt sie. Sie sitzen am TCP-Client, du stellst sie also einmal ein, egal welches Protokoll obendrauf läuft. Die Authentifizierung gehört zur Protokollkomponente selbst.

Sieh es laufen

Publish und Subscribe aus Delphi, in wenigen Minuten.

Ein vertonter Schnellstart mit Untertiteln: ein Muster für jeden Broker, eine MQTT-Verbindung, Topics und Quality of Service, dann die Einstellungen, die in der Produktion zählen. Nichts wird geladen, bevor du auf Play drückst.

sgcMQ-Schnellstart

Mit einem Broker verbinden, einen Topic-Filter abonnieren und veröffentlichen, aus Delphi.

  1. Ein Muster, jeder BrokerErstelle einen TCP-Client, der Socket, Host und Port besitzt, und hänge dann über die Eigenschaft Client eine Protokollkomponente an.
  2. Mit einem MQTT-Broker verbindenRichte den TCP-Client auf den Broker aus, hänge die MQTT-Komponente an, wähle Version 5 oder 3.1.1 und setze Active auf True.
  3. Abonnieren und veröffentlichenSubscribe nimmt einen Topic-Filter und eine QoS entgegen. Publish nimmt ein Topic, die Nutzdaten, die QoS und ein Retain-Flag. Nachrichten kommen in OnMQTTPublish an.
  4. Dasselbe Muster für die anderen BrokerAMQP 0.9.1 mit Exchanges, Queues und Channels, AMQP 1.0, STOMP mit den Varianten für RabbitMQ und ActiveMQ und Kafka mit Consumer Groups und Offsets.
  5. Bereit für die ProduktionWatchDog, Heartbeat und TLS am TCP-Client, Authentifizierung an der Protokollkomponente.
Sieben Komponenten

Fünf Protokollfamilien, nativ implementiert.

sgcMQ implementiert die veröffentlichten Protokolle, statt ein Hersteller-SDK zu kapseln, und jede Lizenz wird mit vollständigem Quellcode ausgeliefert, sodass du die Protokollimplementierungen in deinem eigenen Debugger durchsteppen kannst.

MQTT 3.1.1 & 5.0

TsgcWSPClient_MQTT deckt beide Protokollversionen hinter einer einzigen MQTTVersion-Eigenschaft ab: QoS 0, 1 und 2, Retained Messages, Last Will and Testament, Wildcard-Subscriptions und wiederaufnehmbare Sessions. Version 5 ergänzt Reason Codes, User Properties, Topic Aliases, Shared Subscriptions und den AUTH-Roundtrip.

Den MQTT-Client ansehen →

AMQP 0.9.1

TsgcWSPClient_AMQP spricht das Protokoll, für das RabbitMQ gebaut wurde: Channels, Deklaration von Exchanges und Queues, Bindings, Consumer, Publisher Acknowledgements, Prefetch-QoS und Transaktionen.

Den AMQP-0.9.1-Client ansehen →

AMQP 1.0

TsgcWSPClient_AMQP1 spricht den OASIS-Standard hinter Azure Service Bus und Event Hubs: Container, Sessions, Sender- und Receiver-Links, kreditbasierte Flusssteuerung, SASL und die Claims-Based-Security-Helfer. Ein anderes Wire-Format und ein anderes Objektmodell, daher gibt es dafür eine eigene Komponente.

Den AMQP-1.0-Client ansehen →

Apache Kafka

TsgcWSPClient_Kafka spricht das binäre Kafka-Protokoll über TCP, einschließlich des Record-Batch-Formats v2. Produziere mit gewähltem Acks-Level und gzip-Kompression, konsumiere über eine Gruppe, in der Coordinator-Discovery, Join, Sync, Heartbeat und Rebalance für dich erledigt werden, oder lies eine Partition per Offset.

Den Kafka-Client ansehen →

STOMP 1.0 bis 1.2

TsgcWSPClient_STOMP verarbeitet SEND, SUBSCRIBE, UNSUBSCRIBE, ACK, NACK, Receipts, bidirektionales Heart-Beating und die Transaktions-Frames BEGIN, COMMIT und ABORT. Zwei Nachfahren machen die Destination-Konventionen der Broker zu benannten Methoden, einen für RabbitMQ und einen für ActiveMQ.

Die STOMP-Clients ansehen →

Sechs Zielplattformen, kein Sternchen

Alle sieben Clients und der Träger darunter sind für Win32, Win64, Linux64, macOS, iOS und Android registriert, von Delphi 7 bis RAD Studio 13 und in C++ Builder. Das Messaging-Pack hat keine Plattformeinschränkung.

Die Funktionsmatrix →
Der Code

Vier Protokolle, dieselbe Form.

Lege die Protokollkomponente an, weise den Träger zu, verdrahte die Ereignisse, rufe die Verben auf. Der Wechsel von einem unverschlüsselten Listener zu einem verschlüsselten ist eine Portnummer und TLS := True am Träger, und darüber ändert sich nichts.

uses
  sgcTCP_Client_WS, sgcWebSocket_Classes, sgcWebSocket_Protocols;
var
  TCPClient: TsgcTCPClient;
  MQTT: TsgcWSPClient_MQTT;
begin
  TCPClient := TsgcTCPClient.Create(nil);   // plain MQTT over TCP
  TCPClient.Host := 'broker.example.com';
  TCPClient.Port := 1883;
  TCPClient.WatchDog.Enabled := True;

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

  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;

  TCPClient.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);
end;

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

// For an encrypted broker: same code, TLS on the carrier.
// TCPClient.Port := 8883; TCPClient.TLS := True;
uses
  sgcTCP_Client_WS, sgcWebSocket_Protocols, sgcAMQP_Classes;
var
  TCPClient: TsgcTCPClient;
  AMQP: TsgcWSPClient_AMQP;
begin
  TCPClient := TsgcTCPClient.Create(nil);
  TCPClient.Host := 'broker.example.com';
  TCPClient.Port := 5672;                  // 5671 for the amqps listener

  AMQP := TsgcWSPClient_AMQP.Create(nil);
  AMQP.Client := TCPClient;
  AMQP.AMQPOptions.VirtualHost := '/';
  AMQP.HeartBeat.Enabled  := True;
  AMQP.HeartBeat.Interval := 30;

  AMQP.OnAMQPConnect      := AMQPConnect;
  AMQP.OnAMQPBasicDeliver := AMQPBasicDeliver;

  TCPClient.Active := True;
end;

procedure TForm1.AMQPConnect(Sender: TObject);
begin
  AMQP.OpenChannel('ch1');
  AMQP.DeclareExchange('ch1', 'orders', 'direct');
  AMQP.DeclareQueue('ch1', 'orders_in');
  AMQP.BindQueue('ch1', 'orders_in', 'orders', 'create');
  AMQP.Consume('ch1', 'orders_in');

  // Publish to the exchange with a routing key
  AMQP.PublishMessage('ch1', 'orders', 'create', '{"id":42}');
end;
uses
  sgcTCP_Client_WS, sgcWebSocket_Protocols, sgcKafka_Classes;
var
  TCPClient: TsgcTCPClient;
  Kafka: TsgcWSPClient_Kafka;
begin
  Kafka := TsgcWSPClient_Kafka.Create(nil);
  Kafka.KafkaOptions.ClientId := 'my-delphi-app';
  Kafka.KafkaOptions.Producer.Acks        := kafkaAcksLeader;
  Kafka.KafkaOptions.Producer.Compression := kafkaCompressionGzip;
  Kafka.KafkaOptions.Consumer.GroupId     := 'my-group';
  Kafka.KafkaOptions.Consumer.OffsetReset := kafkaOffsetEarliest;
  Kafka.OnKafkaMessage := KafkaMessage;

  TCPClient := TsgcTCPClient.Create(nil);
  Kafka.Client := TCPClient;
  TCPClient.Host := '127.0.0.1';
  TCPClient.Port := 9092;
  TCPClient.Active := True;

  // produce a record to a topic
  Kafka.Produce('my-topic', 'Hello Kafka', 'key-1');

  // consume: subscribe once, then Poll repeatedly (e.g. from a timer)
  Kafka.Subscribe(['my-topic']);
end;

procedure TForm1.KafkaMessage(Sender: TObject;
  const Message: TsgcKafkaMessage);
begin
  Memo1.Lines.Add(Message.GetKeyString + ' = ' + Message.GetValueString);
end;

// fetch records from a timer, commit when a batch is processed
var
  Messages: TsgcKafkaMessages;
begin
  Messages := Kafka.Poll(1000);
  try
    if Messages.Count > 0 then
      Kafka.CommitSync;
  finally
    Messages.Free;
  end;
end;
uses
  sgcTCP_Client_WS, sgcWebSocket_Classes, sgcWebSocket_Protocols,
  sgcWebSocket_Protocol_STOMP_Broker_Client,
  sgcWebSocket_Protocol_STOMP_RabbitMQ_Client;
var
  TCPClient: TsgcTCPClient;
  STOMP: TsgcWSPClient_STOMP_RabbitMQ;
begin
  TCPClient := TsgcTCPClient.Create(nil);
  TCPClient.Host := 'rabbit.example.com';
  TCPClient.Port := 61613;             // 61614 for the plugin's TLS listener

  STOMP := TsgcWSPClient_STOMP_RabbitMQ.Create(nil);
  STOMP.Client := TCPClient;
  STOMP.Authentication.Enabled  := True;
  STOMP.Authentication.UserName := 'guest';
  STOMP.Authentication.Password := 'guest';

  STOMP.OnRabbitMQConnected := RabbitMQConnected;
  STOMP.OnRabbitMQMessage   := RabbitMQMessage;

  TCPClient.Active := True;
end;

procedure TForm1.RabbitMQConnected(Connection: TsgcWSConnection;
  Headers: TsgcWSRabbitMQSTOMPHeadersConnected);
begin
  // /queue/orders
  STOMP.SubscribeQueue('orders');
  STOMP.PublishQueue('orders', '{"orderId":12345}');
end;

procedure TForm1.RabbitMQMessage(Connection: TsgcWSConnection;
  MessageText: string; Headers: TsgcWSRabbitMQSTOMPHeadersMessage;
  Subscription: TsgcWSBrokerSTOMPSubscriptionItem);
begin
  Memo1.Lines.Add(Headers.Destination + ': ' + MessageText);
end;
  1. Lege die Protokollkomponente anEine Komponente pro Protokoll: MQTT, AMQP 0.9.1, AMQP 1.0, Kafka, STOMP, STOMP für RabbitMQ und STOMP für ActiveMQ.
  2. Weise den Träger zuSetze ihre Eigenschaft Client auf einen TsgcTCPClient mit Host und Port des Brokers. TLS, Proxy und Reconnect werden dort einmalig konfiguriert.
  3. Verdrahte die EreignisseEreignisse für Verbindung, Nachrichten und Bestätigungen kommen an der Komponente an, mit den eigenen Eigenschaften des Protokolls.
  4. Rufe die Verben aufSubscribe und Publish, DeclareQueue und Consume, Produce und Poll, SubscribeQueue und PublishQueue: die Namen, die das Protokoll ohnehin verwendet.

Dieselbe Form in Object Pascal und in C++ Builder, und dieselbe Form für die anderen drei Komponenten. Die vollständige Funktionsmatrix →

Vor dem Kauf

Zwei Dinge, die du vorher wissen solltest.

Was sgcMQ von dir braucht und wie die Bytes den Broker erreichen. Beide Antworten sind kurz, und beide stehen auf dieser Seite statt im Kleingedruckten.

Native Broker-Listener
protocol            component                       TCP     TLS
MQTT 3.1.1 / 5.0    TsgcWSPClient_MQTT             1883    8883
AMQP 0.9.1          TsgcWSPClient_AMQP             5672    5671
AMQP 1.0            TsgcWSPClient_AMQP1            5672    5671
Apache Kafka        TsgcWSPClient_Kafka            9092       *
STOMP               TsgcWSPClient_STOMP           61613       *
STOMP, RabbitMQ     TsgcWSPClient_STOMP_RabbitMQ  61613   61614
STOMP, ActiveMQ     TsgcWSPClient_STOMP_ActiveMQ  61613   61612

* whatever the broker's own encrypted listener is configured as.
  These are the conventional defaults. The carrier's Port takes
  whatever your deployment actually listens on.

sgcMQ ist eigenständig

Alles, was die Komponenten brauchen, steckt in sgcMQ: die sgcWebSockets Core Runtime, der TsgcTCPClient-Träger, die TLS-Schicht und die JSON-Helfer. Ein Installer, vollständiger Quellcode in der Box.

Reines TCP und TLS, und nur das

Jedes Protokoll im Pack läuft über einen rohen Socket, unverschlüsselt geöffnet oder in TLS verpackt, so werden MQTT, AMQP, Kafka und STOMP normalerweise betrieben. Ein Protokoll stattdessen über WebSocket zu betreiben, etwa MQTT über WebSocket oder Web-STOMP, braucht den WebSocket-Client, und den gibt es mit sgcWebSockets. Prüfe vorab, welchen Transport dein Broker anbietet.

Delphi und C++ Builder

sgcMQ unterstützt Delphi 7 bis RAD Studio 13 und C++ Builder, auf allen sechs Plattformen. Es gibt keinen .NET-Build dieses Packs. Wenn du Messaging aus .NET brauchst, findest du es in sgcWebSockets.

Der Träger erledigt den Unterbau

TLSOptions.IOHandler wählt OpenSSL für plattformübergreifende Builds oder SChannel unter Windows, WatchDog verbindet nach einer abgebrochenen Verbindung neu, und HTTP-CONNECT-Proxy-Durchleitung sowie IPv6 brauchen keine zusätzliche Konfiguration. Stelle es einmal ein, und jedes Protokoll darüber erbt es.

sgcMQ implementiert die veröffentlichten Protokolle, statt ein Hersteller-SDK zu kapseln, der Broker ist also deine Wahl: RabbitMQ, Apache Kafka, Eclipse Mosquitto, HiveMQ, EMQX, Apache ActiveMQ, Azure Service Bus und Event Hubs oder AWS IoT Core. Ein Broker-Wechsel bedeutet einen Host, einen Port und einen Satz Zugangsdaten.

Teil von sgcWebSockets

Ein einzelnes Package von sgcWebSockets, eigenständig lizenziert.

sgcMQ bündelt die sgcWebSockets Core Runtime, auf der es aufbaut, es wird also keine weitere eSeGeCe-Lizenz benötigt. Jede Lizenz enthält vollständigen Quellcode und royaltyfreie Auslieferung auf allen sechs Zielplattformen.

Single

1 Entwicklerlizenz. Nutzung auf jeweils einem Rechner.

€249

Team

2 Entwicklerlizenzen. Nutzung auf jeweils zwei Rechnern.

€399

Site

Unbegrenzt viele Entwickler. Alle Firmenrechner.

€649

Client-Komponenten für MQTT, AMQP 0.9.1 und 1.0, Apache Kafka und STOMP für Delphi und C++ Builder, mit enthaltener sgcWebSockets Core Runtime. Brauchst du auch WebSocket-Transporte oder .NET? Die gibt es mit sgcWebSockets.

Preise und Lizenzen ansehen
REFERENZEN

Was Entwickler sagen

Weltweit im Einsatz bei Delphi-, C++ Builder-, Lazarus- und .NET-Entwicklern.

Eure sgcWebSockets-Bibliothek ist sehr nützlich und einfach einzurichten. Macht weiter so!
Simone Moretti Delphi-Entwickler
sgcWebSockets ist großartig und euer Support ist der beste!
Christian Meyer Gründer & CTO
Vielen Dank für eure Hilfe und Unterstützung, ich liebe eure Komponenten.
Mark Steinfeld CTO

Sprich aus Delphi mit deinem Broker.

MQTT, AMQP, Kafka und STOMP in einem Package, nativ implementiert, mit enthaltener sgcWebSockets Core Runtime und vollständigem Quellcode in der Box. Windows, Linux, macOS, iOS und Android aus demselben Code.

Mehr von eSeGeCe

Weitere Produkte von eSeGeCe

sgcMQ teilt Konventionen mit den anderen eSeGeCe-Komponentenbibliotheken für Delphi, C++ Builder und .NET. Sie werden mit vollständigem Quellcode ausgeliefert und lassen sich royaltyfrei einsetzen.

sgcWebSockets

WebSocket, HTTP/2, MQTT, AMQP, WebRTC, KI und 30+ API-Integrationen für Delphi, C++ Builder, Lazarus und .NET. Hier lebt der WebSocket-Träger.

sgcAuth

OAuth2-Client, JWT-Client und WebAuthn-Unterstützung für Delphi und C++ Builder. Eigenständig, mit gebündelter sgcWebSockets-Core-Runtime.

sgcHTTP

HTTP-Server, HTTP/2-Client, gRPC-Client sowie Clients für Google Cloud Pub/Sub, Calendar und FCM für Delphi und C++ Builder. Eigenständig, die sgcWebSockets Core Runtime ist enthalten.

sgcREST

REST-Server-, OpenAPI-Server- und OpenAPI-Client-Komponenten für Delphi und C++ Builder. Eigenständig, mit gebündelter sgcWebSockets-Core-Runtime.

sgcAI

Komponenten für KI, LLM und MCP für Delphi und C++ Builder. Sieben LLM-Anbieter hinter einer einzigen Komponente, dazu MCP, Embeddings und Sprache. Eigenständig, die sgcWebSockets Core Runtime ist enthalten.

sgcHTML

Serverseitige HTML- und UI-Komponenten auf Basis von Bootstrap 5 und htmx. Setze ein Live-Dashboard vor die Queues, die sgcMQ konsumiert.

sgcQUIC

Reiner QUIC-Transport sowie HTTP/3-Client und -Server mit WebTransport. Ein Add-on zu sgcWebSockets Enterprise.

sgcOpenAPI

OpenAPI-3.x-Parser, nativer Pascal-SDK-Generator, OpenAPI-Server-Komponente und 1.195+ vorgefertigte Cloud-SDKs.

sgcSign

XAdES, PAdES, CAdES und ASiC für Dokumente, Authenticode, ClickOnce, NuGet und VSIX für Code.

sgcPDF

PDF-Dateien erstellen, bearbeiten, ansehen, signieren, schwärzen und validieren in reinem Object Pascal, ohne auszuliefernde DLL.

sgcBiometrics

Windows Hello, Fingerabdrucksensoren und das Windows Biometric Framework für Delphi und C++ Builder.

sgcIndy

Aktualisierte Indy-TCP/IP-Komponenten mit modernem TLS, IPv6 und HTTP/2 für Delphi 7 bis 13.

Neues aus dem Blog

Alle Beiträge ansehen →

Du siehst gerade die Ansicht sgcMQ von eSeGeCe.

Zeig mir eine andere Perspektive →
30 Tage Geld-zurück-GarantieNicht zufrieden? Fordere innerhalb von 30 Tagen nach dem Kauf eine vollständige Rückerstattung an. Rückerstattungsrichtlinie ansehen