eSeGeCe — Enterprise-Kommunikationskomponenten für Delphi & .NET
IM FOKUS · sgcMQ

Jeder Broker, ein Träger

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 auszuliefern. Alle sieben laufen auf einem TsgcTCPClient, unverschlüsselt geöffnet oder in TLS verpackt.

  • 7 Client-Komponenten
  • 5 Protokollfamilien
  • Windows · Linux · macOS · iOS · Android
  • Delphi 7 bis 13 · C++ Builder

Fünf Protokollfamilien, sieben Komponenten

sgcMQ ist ein eigenständiges Paket. Es bringt die sgcWebSockets Core Runtime mit, auf der es aufbaut, und jede Lizenz wird mit vollständigem Quellcode ausgeliefert, sodass du die Protokollimplementierungen in deinem eigenen Debugger Schritt für Schritt durchgehen kannst.

7 Client-Komponenten MQTT, AMQP 0.9.1, AMQP 1.0, Kafka, STOMP, STOMP RabbitMQ und STOMP ActiveMQ, auf einer Palettenseite.
5 Protokollfamilien Jedes Wire-Format wird in Object Pascal geparst und geschrieben, innerhalb der Bibliothek.
6 Zielplattformen Win32, Win64, Linux64, macOS, iOS und Android, aus einem einzigen Quellbaum.
0 Externe Bibliotheken Kein librdkafka, kein Paho, kein Qpid, keine DLL und kein vorgeschalteter REST-Proxy.
1 Transport-Träger Ein TsgcTCPClient trägt alle sieben, TLS, Proxy und Reconnect werden also nur einmal konfiguriert.
sgcMQ

Message-Queue- und Streaming-Clients für Delphi und C++ Builder. Ein eigenständiges Paket mit enthaltener sgcWebSockets Core Runtime, vollständigem Quellcode und royaltyfreier Bereitstellung auf allen sechs Zielplattformen.

Eine Komponente pro Protokoll, ein API-Stil

Zieh die Protokollkomponente auf ein Formular, weise ihrer Client-Eigenschaft einen TsgcTCPClient 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.

MQTT 3.1.1 & 5.0

Publish, Subscribe und die komplette QoS-Maschinerie

TsgcWSPClient_MQTT deckt beide Protokollversionen hinter einer einzigen MQTTVersion-Eigenschaft ab. QoS 0, 1 und 2, wobei der PUBACK-, PUBREC-, PUBREL- und PUBCOMP-Austausch als Ereignisse sichtbar wird, statt versteckt zu bleiben, dazu Retained Messages, Last Will and Testament, Wildcard-Subscriptions und wiederaufnehmbare Sitzungen. Version 5 ergänzt Reason Codes, User Properties, Topic-Aliasse, Shared Subscriptions und den AUTH-Roundtrip.

Den MQTT-Client ansehen →
AMQP 0.9.1 & 1.0

Zwei Protokolle, die sich einen Namen teilen

TsgcWSPClient_AMQP spricht AMQP 0.9.1, das Protokoll, für das RabbitMQ gebaut wurde: Channels, Exchange- und Queue-Deklaration, Bindings, Consumer, Publisher-Bestätigungen, Prefetch-QoS und Transaktionen. TsgcWSPClient_AMQP1 spricht AMQP 1.0, den OASIS-Standard hinter Azure Service Bus und Event Hubs: Container, Sessions, Sender- und Receiver-Links, kreditbasierte Flusskontrolle, SASL und die Claims-Based-Security-Helfer. Anderes Wire-Format, anderes Objektmodell, deshalb gibt es für jedes eine eigene Komponente.

AMQP 0.9.1 → AMQP 1.0 →
Apache Kafka

Das Binärprotokoll, direkt gesprochen

TsgcWSPClient_Kafka spricht das Kafka-Wire-Protokoll über TCP, einschließlich des v2-Record-Batch-Formats. 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

Ein generischer Client, zwei Broker-Dialekte

TsgcWSPClient_STOMP beherrscht SEND, SUBSCRIBE, UNSUBSCRIBE, ACK, NACK, Receipts, bidirektionales Heart-Beating und die Transaktions-Frames BEGIN, COMMIT und ABORT. Zwei Nachfahren machen aus den Destination-Konventionen der Broker benannte Methoden, einer für RabbitMQ und einer für ActiveMQ.

Die STOMP-Clients ansehen →
Plattformübergreifend

Sechs Zielplattformen, ohne 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 unter C++ Builder. Das Messaging-Paket kennt keine Plattformeinschränkung.

Die Funktionsmatrix →

Referenzseiten zu jeder Komponente:

Vier Protokolle, dieselbe Form

Erzeuge die Protokollkomponente, weise den Träger zu, hänge die Ereignisse ein, rufe die Verben auf. Der Wechsel von einem unverschlüsselten zu einem verschlüsselten Listener 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;

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

Zwei Dinge, die du vorher wissen solltest

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

Native Broker-Listener
Protokoll           Komponente                      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

* je nachdem, wie der verschlüsselte Listener des Brokers
  konfiguriert ist. Dies sind die üblichen Standardwerte. Der Port
  des Trägers nimmt, worauf dein Deployment tatsächlich lauscht.

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 im Paket.

Reines TCP und TLS, und nur das

Jedes Protokoll im Paket läuft auf einem rohen Socket, unverschlüsselt geöffnet oder in TLS verpackt. Das deckt die hier aufgeführten nativen Broker-Ports ab, so werden MQTT, AMQP, Kafka und STOMP üblicherweise betrieben. Soll ein Protokoll stattdessen über WebSocket laufen, zum Beispiel MQTT über WebSocket oder Web-STOMP, braucht es den WebSocket-Client, und der wird mit sgcWebSockets ausgeliefert. Prüfe vor der Entscheidung, welchen Transport dein Broker anbietet.

Delphi und C++ Builder

sgcMQ richtet sich an Delphi 7 bis RAD Studio 13 und C++ Builder, auf allen sechs Plattformen. Einen .NET-Build dieses Pakets gibt es nicht. Wenn du Messaging aus .NET brauchst, findest du das in sgcWebSockets.

Der Träger erledigt die Grundarbeit

TLSOptions.IOHandler wählt OpenSSL für plattformübergreifende Builds oder SChannel unter Windows, WatchDog verbindet nach einem Verbindungsabriss neu, und HTTP-CONNECT-Proxy-Traversal und IPv6 brauchen keine zusätzliche Konfiguration. Einmal eingestellt, erbt jedes Protokoll darüber diese Einstellungen.

OpenSSL SChannel Mutual TLS HTTP-Proxy WatchDog-Reconnect

Jede Komponente und Eigenschaft →

sgcMQ implementiert die veröffentlichten Protokolle, statt ein Hersteller-SDK zu umhüllen, 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 ist ein Host, ein Port und ein Satz Zugangsdaten.

Neun Bibliotheken, ein Werkzeugkasten

sgcMQ ist eine von neun eSeGeCe-Komponentenbibliotheken für Delphi, C++ Builder und .NET. Sie teilen dieselben Konventionen, werden mit vollständigem Quellcode ausgeliefert und lassen sich royaltyfrei verteilen.

sgcMQ

Client-Komponenten für MQTT, AMQP 0.9.1 und 1.0, Apache Kafka und STOMP für Delphi und C++ Builder. Eigenständig, die sgcWebSockets Core Runtime ist enthalten.

Mehr erfahren →

sgcWebSockets

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

Mehr erfahren →

sgcHTML

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

Mehr erfahren →

sgcQUIC

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

Mehr erfahren →

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.

Mehr erfahren →

sgcOpenAPI

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

Mehr erfahren →

sgcSign

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

Mehr erfahren →

sgcBiometrics

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

Mehr erfahren →

sgcIndy

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

Mehr erfahren →

Preise und Lizenzen ansehen Kostenlose Testversion herunterladen

Was Entwickler sagen

Vertrauen von Delphi-, C++ Builder-, Lazarus- und .NET-Entwicklern weltweit.

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

Du siehst gerade die Ansicht Messaging von eSeGeCe.

Zeig mir eine andere Perspektive →

Sprich mit deinem Broker aus Delphi heraus

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