eSeGeCe — Enterprise-communicatiecomponenten voor Delphi & .NET
UITGELICHT · sgcMQ

Elke broker, één drager

Zeven clientcomponenten spreken MQTT 3.1.1 en 5.0, AMQP 0.9.1, AMQP 1.0, het Apache Kafka-wireprotocol en STOMP 1.0 tot en met 1.2, met brokerdialecten voor RabbitMQ en ActiveMQ. Elk frame wordt geparseerd en geschreven in Object Pascal, binnen de bibliotheek, dus er is geen librdkafka, geen Paho, geen Qpid en geen DLL om mee te leveren. Alle zeven draaien op één TsgcTCPClient, kaal geopend of verpakt in TLS.

  • 7 clientcomponenten
  • 5 protocolfamilies
  • Windows · Linux · macOS · iOS · Android
  • Delphi 7 tot en met 13 · C++ Builder

Vijf protocolfamilies, zeven componenten

sgcMQ is een standalone package. Het levert de sgcWebSockets Core runtime waarop het is gebouwd mee, en elke licentie komt met volledige broncode, zodat je in je eigen debugger door de protocolimplementaties kunt stappen.

7 Clientcomponenten MQTT, AMQP 0.9.1, AMQP 1.0, Kafka, STOMP, STOMP RabbitMQ en STOMP ActiveMQ, op één paletpagina.
5 Protocolfamilies Elk wire-formaat geparseerd en geschreven in Object Pascal, binnen de bibliotheek.
6 Doelplatforms Win32, Win64, Linux64, macOS, iOS en Android, vanuit één source tree.
0 Externe bibliotheken Geen librdkafka, geen Paho, geen Qpid, geen DLL en geen REST-proxy ervoor.
1 Transportdrager Eén TsgcTCPClient draagt alle zeven, dus TLS, proxy en reconnect configureer je één keer.
sgcMQ

Message-queue- en streamingclients voor Delphi en C++ Builder. Een standalone package met de sgcWebSockets Core runtime inbegrepen, volledige broncode en royaltyvrije implementatie op alle zes doelplatforms.

Eén component per protocol, één API-stijl

Zet het protocolcomponent op een form, wijs een TsgcTCPClient toe aan zijn Client-eigenschap, koppel de events en roep daarna de eigen werkwoorden van het protocol aan. De naamgeving is consistent over alle zeven, dus wie er één leert, kent de rest al grotendeels.

MQTT 3.1.1 & 5.0

Publish, subscribe en de volledige QoS-machinerie

TsgcWSPClient_MQTT dekt beide protocolversies achter één MQTTVersion-eigenschap. QoS 0, 1 en 2 met de PUBACK-, PUBREC-, PUBREL- en PUBCOMP-uitwisseling zichtbaar als events in plaats van verborgen, retained messages, Last Will and Testament, wildcard-subscripties en hervatbare sessies. Versie 5 voegt reason codes, user properties, topic-aliassen, shared subscriptions en de AUTH-round-trip toe.

Bekijk de MQTT-client →
AMQP 0.9.1 & 1.0

Twee protocollen die een naam delen

TsgcWSPClient_AMQP spreekt AMQP 0.9.1, het protocol waarvoor RabbitMQ is gebouwd: channels, exchange- en queue-declaratie, bindings, consumers, publisher-bevestigingen, prefetch-QoS en transacties. TsgcWSPClient_AMQP1 spreekt AMQP 1.0, de OASIS-standaard achter Azure Service Bus en Event Hubs: containers, sessies, sender- en receiver-links, creditgebaseerde flow control, SASL en de Claims-Based Security-helpers. Ander wire-formaat, ander objectmodel, dus er is een component voor elk.

AMQP 0.9.1 → AMQP 1.0 →
Apache Kafka

Het binaire protocol, rechtstreeks gesproken

TsgcWSPClient_Kafka spreekt het Kafka-wireprotocol over TCP, inclusief het v2-record-batch-formaat. Produceer met een gekozen acks-niveau en gzip-compressie, consumeer via een group waar coordinator-discovery, join, sync, heartbeat en rebalance voor je worden afgehandeld, of lees een partitie op offset.

Bekijk de Kafka-client →
STOMP 1.0 t/m 1.2

Eén generieke client, twee brokerdialecten

TsgcWSPClient_STOMP verwerkt SEND, SUBSCRIBE, UNSUBSCRIBE, ACK, NACK, receipts, bidirectionele heart-beating en de transactieframes BEGIN, COMMIT en ABORT. Twee afgeleide componenten vertalen de destination-conventies van de broker naar benoemde methoden, één voor RabbitMQ en één voor ActiveMQ.

Bekijk de STOMP-clients →
Cross-platform

Zes doelplatforms, zonder sterretje

Alle zeven clients en de drager eronder zijn geregistreerd voor Win32, Win64, Linux64, macOS, iOS en Android, van Delphi 7 tot en met RAD Studio 13 en op C++ Builder. Het messaging-pack kent geen platformbeperking.

De feature-matrix →

Referentiepagina's voor elk component:

Vier protocollen, dezelfde vorm

Maak het protocolcomponent aan, wijs de drager toe, koppel de events, roep de werkwoorden aan. Overschakelen van een kale listener naar een versleutelde is een poortnummer en TLS := True op de drager, en niets daarboven verandert.

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;

Dezelfde vorm in Object Pascal en in C++ Builder, en dezelfde vorm voor de andere drie componenten. De volledige feature-matrix →

Twee dingen die je vooraf wilt weten

Wat sgcMQ van jou nodig heeft, en hoe de bytes de broker bereiken. Beide antwoorden zijn kort, en beide staan op deze pagina in plaats van in de kleine lettertjes.

Native broker-listeners
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

* de poort waarop de versleutelde listener van de broker zelf staat
  geconfigureerd. Dit zijn de gebruikelijke standaardwaarden. De Port
  van de drager neemt wat er in jouw deployment werkelijk luistert.

sgcMQ is zelfstandig

Alles wat de componenten nodig hebben zit in sgcMQ: de sgcWebSockets Core runtime, de drager TsgcTCPClient, de TLS-laag en de JSON-helpers. Eén installer, volledige broncode in de doos.

Kale TCP en TLS, en alleen dat

Elk protocol in het pack draait op een rauwe socket, kaal geopend of verpakt in TLS. Dat dekt de native brokerpoorten die hier staan, en zo worden MQTT, AMQP, Kafka en STOMP normaal gesproken uitgerold. Een protocol in plaats daarvan over WebSocket draaien, bijvoorbeeld MQTT over WebSocket of Web-STOMP, vereist de WebSocket-client, en die wordt geleverd met sgcWebSockets. Controleer welk transport jouw broker aanbiedt voordat je kiest.

Delphi en C++ Builder

sgcMQ richt zich op Delphi 7 tot en met RAD Studio 13 en C++ Builder, op alle zes platforms. Er is geen .NET-build van dit pack. Heb je messaging nodig vanuit .NET, dan zit dat in sgcWebSockets.

De drager doet het loodgieterswerk

TLSOptions.IOHandler kiest OpenSSL voor cross-platform builds of SChannel op Windows, WatchDog herstelt de verbinding na een weggevallen lijn, en HTTP CONNECT-proxytraversal en IPv6 hebben geen extra configuratie nodig. Stel het één keer in en elk protocol erboven erft het.

OpenSSL SChannel Mutual TLS HTTP-proxy WatchDog-reconnect

Elk component en elke eigenschap →

sgcMQ implementeert de gepubliceerde protocollen in plaats van een vendor-SDK te verpakken, dus de broker is jouw keuze: RabbitMQ, Apache Kafka, Eclipse Mosquitto, HiveMQ, EMQX, Apache ActiveMQ, Azure Service Bus en Event Hubs, of AWS IoT Core. Van broker wisselen is een host, een poort en een set inloggegevens.

Negen bibliotheken, één gereedschapskist

sgcMQ is een van de negen eSeGeCe-componentenbibliotheken voor Delphi, C++ Builder en .NET. Ze delen dezelfde conventies, worden geleverd met volledige broncode en zijn royaltyvrij te implementeren.

sgcMQ

Clientcomponenten voor MQTT, AMQP 0.9.1 en 1.0, Apache Kafka en STOMP, voor Delphi en C++ Builder. Standalone, met de sgcWebSockets Core runtime inbegrepen.

Meer informatie →

sgcWebSockets

WebSocket, HTTP/2, MQTT, AMQP, WebRTC, AI en 30+ API-integraties voor Delphi, C++ Builder, Lazarus en .NET. Hier zit de WebSocket-drager.

Meer informatie →

sgcHTML

Server-side HTML- en UI-componenten op Bootstrap 5 en htmx. Zet een live dashboard voor de queues die sgcMQ consumeert.

Meer informatie →

sgcQUIC

Pure QUIC-transport en een HTTP/3-client en -server, met WebTransport. Een add-on voor sgcWebSockets Enterprise.

Meer informatie →

sgcAI

AI-, LLM- en MCP-componenten voor Delphi en C++ Builder. Zeven LLM-providers achter één component, plus MCP, embeddings en spraak. Standalone, met de sgcWebSockets Core runtime inbegrepen.

Meer informatie →

sgcOpenAPI

OpenAPI 3.x-parser, native Pascal-SDK-generator, OpenAPI-servercomponent, en 1.195+ kant-en-klare cloud-SDK's.

Meer informatie →

sgcSign

XAdES, PAdES, CAdES en ASiC voor documenten, Authenticode, ClickOnce, NuGet en VSIX voor code.

Meer informatie →

sgcBiometrics

Windows Hello, vingerafdruksensoren en het Windows Biometric Framework voor Delphi en C++ Builder.

Meer informatie →

sgcIndy

Bijgewerkte Indy TCP/IP-componenten met moderne TLS, IPv6 en HTTP/2 voor Delphi 7 tot en met 13.

Meer informatie →

Bekijk de prijzen en licenties Download de gratis proefversie

Wat ontwikkelaars zeggen

Vertrouwd door Delphi-, C++ Builder-, Lazarus- en .NET-ontwikkelaars over de hele wereld.

Jullie sgcWebSockets-bibliotheek is erg handig en eenvoudig op te zetten. Ga zo door!

Simone Moretti Delphi-ontwikkelaar

sgcWebSockets is geweldig en jullie support is de beste!

Christian Meyer Oprichter & CTO

Heel erg bedankt voor jullie hulp en ondersteuning, ik ben dol op jullie componenten.

Mark Steinfeld CTO

Je ziet nu de weergave Messaging van eSeGeCe.

Toon me een andere invalshoek →

Praat met je broker vanuit Delphi

MQTT, AMQP, Kafka en STOMP in één package, native geïmplementeerd, met de sgcWebSockets Core runtime inbegrepen en volledige broncode in de doos. Windows, Linux, macOS, iOS en Android vanuit dezelfde code.