sgcMQ Elke broker, één drager. Geen DLL om mee te leveren.

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 in Object Pascal binnen de bibliotheek geparseerd en geschreven, dus er is geen librdkafka, geen Paho, geen Qpid en geen DLL om mee te leveren. Alle zeven draaien op één TsgcTCPClient, gewoon geopend of verpakt in TLS.

Een los package van sgcWebSockets. Bekijk de prijzen →
  • MQTT 3.1.1 & 5.0
  • AMQP 0.9.1
  • AMQP 1.0
  • Apache Kafka
  • STOMP 1.0 tot en met 1.2
  • Delphi 7 t/m 13
  • C++ Builder
  • 7Clientcomponenten op één palettepagina
  • 5Protocolfamilies, elk geparseerd in Object Pascal
  • 6Doelplatformen: Win32, Win64, Linux64, macOS, iOS, Android
  • 0Externe bibliotheken: geen librdkafka, Paho, Qpid of DLL
  • 1Transportdrager voor alle zeven componenten
Eén API-stijl

Eén component per protocol. Dezelfde vorm voor alle zeven.

Zet de protocolcomponent op een formulier, wijs een TsgcTCPClient toe aan de Client eigenschap, koppel de events en roep dan de eigen verben van het protocol aan. De naamgeving is bij alle zeven consistent, dus als je er één leert, ben je al een heel eind met de rest.

Eén patroon voor elke broker: een TsgcTCPClient gekoppeld aan een protocolcomponent via de eigenschap Client, over gewoon TCP of TLS

Een TCP-client, plus een protocolcomponent

De TsgcTCPClient beheert de socket, de host en de poort. De protocolcomponent koppelt via zijn Client eigenschap en spreekt daarbovenop MQTT, AMQP, Kafka of STOMP. Overstappen van een gewone listener naar een versleutelde is een poortnummer en TLS := True op de drager, en niets erboven verandert.

Verbinden met een MQTT-broker: de Delphi-code naast de CONNECT- en CONNACK-uitwisseling

Verbonden in een paar regels

Richt de drager op je broker, koppel TsgcWSPClient_MQTT, kies versie 5 of 3.1.1 met één MQTTVersion eigenschap en zet Active op True. Dat is de hele verbinding.

MQTT-servicekwaliteit 0, 1 en 2 met de PUBLISH-, PUBACK-, PUBREC-, PUBREL- en PUBCOMP-uitwisseling

De hele QoS-machinerie, beschikbaar als events

QoS 0, 1 en 2, waarbij de PUBACK-, PUBREC-, PUBREL- en PUBCOMP-uitwisseling als events beschikbaar is in plaats van verborgen. Retained messages, Last Will and Testament, wildcard-abonnementen en hervatbare sessies zijn inbegrepen.

Productie-instellingen op de TCP-client: WatchDog, HeartBeat en TLS, met authenticatie op de protocolcomponent

Productie-instellingen zitten op de drager

WatchDog herverbindt na een verbroken verbinding, de heartbeat houdt de verbinding in leven en TLS versleutelt haar. Ze zitten op de TCP-client, dus je stelt ze één keer in, welk protocol er ook bovenop draait. Authenticatie hoort bij de protocolcomponent zelf.

Zie het draaien

Publiceren en abonneren vanuit Delphi, in een paar minuten.

Een snelstart met voice-over en ondertitels: één patroon voor elke broker, een MQTT-verbinding, topics en servicekwaliteit, daarna de instellingen die in productie tellen. Er wordt niets gedownload voordat je op afspelen drukt.

sgcMQ quickstart

Verbind met een broker, abonneer je op een topicfilter en publiceer, vanuit Delphi.

  1. Eén patroon, elke brokerMaak een TCP-client, die de socket, host en poort beheert, en koppel daarna een protocolcomponent via de eigenschap Client.
  2. Verbinden met een MQTT-brokerRicht de TCP-client op de broker, koppel de MQTT-component, kies versie 5 of 3.1.1 en zet Active op True.
  3. Abonneren en publicerenSubscribe neemt een topicfilter en een QoS. Publish neemt een topic, de payload, de QoS en een retain-vlag. Berichten komen binnen op OnMQTTPublish.
  4. Hetzelfde patroon voor de andere brokersAMQP 0.9.1 met exchanges, queues en channels, AMQP 1.0, STOMP met de RabbitMQ- en ActiveMQ-varianten en Kafka met consumer groups en offsets.
  5. Klaar voor productieWatchDog, heartbeat en TLS op de TCP-client, authenticatie op de protocolcomponent.
Zeven componenten

Vijf protocolfamilies, native geïmplementeerd.

sgcMQ implementeert de gepubliceerde protocollen in plaats van een SDK van een leverancier te omhullen, en elke licentie bevat de volledige broncode, zodat je de protocolimplementaties in je eigen debugger kunt doorlopen.

MQTT 3.1.1 & 5.0

TsgcWSPClient_MQTT dekt beide protocolversies achter één MQTTVersion eigenschap: QoS 0, 1 en 2, retained messages, Last Will and Testament, wildcard-abonnementen en hervatbare sessies. Versie 5 voegt reden-codes, gebruikerseigenschappen, topic-aliassen, gedeelde abonnementen en de AUTH-uitwisseling toe.

Bekijk de MQTT-client →

AMQP 0.9.1

TsgcWSPClient_AMQP spreekt het protocol waarvoor RabbitMQ is gebouwd: channels, declaratie van exchanges en queues, bindings, consumers, publisher-bevestigingen, prefetch-QoS en transacties.

Bekijk de AMQP 0.9.1-client →

AMQP 1.0

TsgcWSPClient_AMQP1 spreekt de OASIS-standaard achter Azure Service Bus en Event Hubs: containers, sessies, zender- en ontvangerlinks, op krediet gebaseerde flowcontrol, SASL en de Claims-Based Security-helpers. Een ander wireformaat en objectmodel, dus het heeft een eigen component.

Bekijk de AMQP 1.0-client →

Apache Kafka

TsgcWSPClient_Kafka praat het binaire Kafka-protocol over TCP, inclusief het v2-recordbatchformaat. Produceer met een gekozen acks-niveau en gzip-compressie, consumeer via een groep waarbij coordinator discovery, join, sync, heartbeat en rebalance voor je worden afgehandeld, of lees een partitie via offset.

Bekijk de Kafka-client →

STOMP 1.0 tot en met 1.2

TsgcWSPClient_STOMP verwerkt SEND, SUBSCRIBE, UNSUBSCRIBE, ACK, NACK, ontvangstbevestigingen, bidirectionele heart-beating en de transactieframes BEGIN, COMMIT en ABORT. Twee afgeleide componenten zetten de destinationconventies van brokers om in benoemde methoden, één voor RabbitMQ en één voor ActiveMQ.

Bekijk de STOMP-clients →

Zes doelplatformen, geen 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 berichtenpakket kent geen platformbeperking.

De functiematrix →
De code

Vier protocollen, dezelfde vorm.

Maak de protocolcomponent, wijs de drager toe, koppel de events, roep de verben aan. Overstappen van een gewone listener naar een versleutelde is een poortnummer en TLS := True op de drager, en niets erboven 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;
  1. Maak de protocolcomponentEén component per protocol: MQTT, AMQP 0.9.1, AMQP 1.0, Kafka, STOMP, STOMP voor RabbitMQ en STOMP voor ActiveMQ.
  2. Wijs de drager toeZet de eigenschap Client op een TsgcTCPClient met de host en poort van de broker. TLS, proxy en herverbinden worden daar eenmalig ingesteld.
  3. Koppel de eventsEvents voor verbinden, berichten en bevestigingen komen binnen op de component, met de eigen eigenschappen van het protocol.
  4. Roep de verben aanSubscribe en Publish, DeclareQueue en Consume, Produce en Poll, SubscribeQueue en PublishQueue: de namen die het protocol zelf al gebruikt.

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

Voordat je koopt

Twee dingen om eerst te weten.

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

Native brokerlisteners
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 is standalone

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

Gewoon TCP en TLS, en alleen dat

Elk protocol in het pakket draait op een kale socket, gewoon geopend of verpakt in TLS, zoals MQTT, AMQP, Kafka en STOMP normaal worden uitgerold. Een protocol over WebSocket draaien, bijvoorbeeld MQTT over WebSocket of Web-STOMP, vereist de WebSocket-client, en die wordt meegeleverd met sgcWebSockets. Controleer welk transport je 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 de platformen. Er is geen .NET-build van dit pakket. Als je berichtenverkeer vanuit .NET nodig hebt, zit dat in sgcWebSockets.

De drager doet het leidingwerk

TLSOptions.IOHandler kiest OpenSSL voor platformonafhankelijke builds of SChannel op Windows, WatchDog herverbindt na een verbroken verbinding, en HTTP CONNECT-proxydoorgifte en IPv6 vragen geen extra configuratie. Stel het één keer in en elk protocol erboven erft het.

sgcMQ implementeert de gepubliceerde protocollen in plaats van een SDK van een leverancier te omhullen, 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.

Onderdeel van sgcWebSockets

Een los package van sgcWebSockets, met een eigen licentie.

sgcMQ bundelt de sgcWebSockets Core-runtime waarop het is gebouwd, dus er is geen andere eSeGeCe-licentie nodig. Elke licentie bevat de volledige broncode en royalty-vrije uitrol op alle zes de doelplatformen.

Single

1 ontwikkelaarslicentie. Gebruik op één machine tegelijk.

€249

Team

2 ontwikkelaarslicenties. Gebruik op twee machines tegelijk.

€399

Site

Onbeperkt aantal ontwikkelaars. Alle bedrijfsmachines.

€649

MQTT-, AMQP 0.9.1- en 1.0-, Apache Kafka- en STOMP-clientcomponenten voor Delphi en C++ Builder, met de sgcWebSockets Core-runtime meegeleverd. Heb je ook WebSocket-transporten of .NET nodig? Die worden meegeleverd met sgcWebSockets.

Bekijk prijzen en licenties
Referenties

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

Praat met je broker vanuit Delphi.

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

Meer van eSeGeCe

Andere producten van eSeGeCe

sgcMQ deelt conventies met de andere eSeGeCe-componentbibliotheken voor Delphi, C++ Builder en .NET. Ze worden geleverd met volledige broncode en rollen royalty-vrij uit.

sgcWebSockets

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

sgcAuth

OAuth2-client, JWT-client en WebAuthn-ondersteuning voor Delphi en C++ Builder. Standalone, met de sgcWebSockets Core runtime inbegrepen.

sgcHTTP

HTTP-server, HTTP/2-client, gRPC-client en clients voor Google Cloud Pub/Sub, Calendar en FCM, voor Delphi en C++ Builder. Standalone, met de sgcWebSockets Core runtime inbegrepen.

sgcREST

REST-server, OpenAPI-server en OpenAPI-clientcomponenten voor Delphi en C++ Builder. Standalone, met de sgcWebSockets Core runtime inbegrepen.

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.

sgcHTML

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

sgcQUIC

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

sgcOpenAPI

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

sgcSign

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

sgcPDF

PDF-bestanden maken, bewerken, bekijken, ondertekenen, redigeren en valideren in pure Object Pascal, zonder DLL. Wordt los gelicentieerd.

sgcBiometrics

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

sgcIndy

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

Laatste blogberichten

Bekijk alle berichten →

Je bekijkt nu de sgcMQ-weergave van eSeGeCe.

Toon me een andere invalshoek →
Niet-goed-geld-terug-garantie van 30 dagenNiet tevreden? Vraag binnen 30 dagen na aankoop een volledige terugbetaling aan. Bekijk het terugbetalingsbeleid