eSeGeCe — Composants de communication d’entreprise pour Delphi & .NET
EN VEDETTE · sgcMQ

Tous les brokers, un seul support de transport

Sept composants clients parlent MQTT 3.1.1 et 5.0, AMQP 0.9.1, AMQP 1.0, le protocole binaire d’Apache Kafka et STOMP 1.0 à 1.2, avec des dialectes de brokers pour RabbitMQ et ActiveMQ. Chaque trame est analysée et écrite en Object Pascal dans la bibliothèque, il n’y a donc ni librdkafka, ni Paho, ni Qpid, ni DLL à distribuer. Les sept circulent sur un seul TsgcTCPClient, ouvert en clair ou enveloppé dans du TLS.

  • 7 composants clients
  • 5 familles de protocoles
  • Windows · Linux · macOS · iOS · Android
  • Delphi 7 à 13 · C++ Builder

Cinq familles de protocoles, sept composants

sgcMQ est un package autonome. Il embarque le runtime sgcWebSockets Core sur lequel il repose, et chaque licence est livrée avec le code source complet, si bien que les implémentations des protocoles se tracent dans ton propre débogueur.

7 Composants clients MQTT, AMQP 0.9.1, AMQP 1.0, Kafka, STOMP, STOMP RabbitMQ et STOMP ActiveMQ, sur une seule page de palette.
5 Familles de protocoles Chaque format binaire est analysé et écrit en Object Pascal, dans la bibliothèque.
6 Plateformes cibles Win32, Win64, Linux64, macOS, iOS et Android, à partir d’une seule arborescence source.
0 Bibliothèques externes Ni librdkafka, ni Paho, ni Qpid, ni DLL, ni proxy REST devant.
1 Support de transport Un seul TsgcTCPClient porte les sept, donc TLS, proxy et reconnexion se configurent une seule fois.
sgcMQ

Des clients de files de messages et de streaming pour Delphi et C++ Builder. Un package autonome avec le runtime sgcWebSockets Core inclus, le code source complet et un déploiement sans royalties sur les six cibles.

Un composant par protocole, un seul style d’API

Dépose le composant de protocole sur une fiche, assigne un TsgcTCPClient à sa propriété Client, branche les événements, puis appelle les verbes propres au protocole. Le nommage est cohérent sur les sept, en apprendre un te mène donc déjà presque au bout des autres.

MQTT 3.1.1 & 5.0

Publier, s’abonner et toute la mécanique QoS

TsgcWSPClient_MQTT couvre les deux versions du protocole derrière une seule propriété MQTTVersion. QoS 0, 1 et 2 avec l’échange PUBACK, PUBREC, PUBREL et PUBCOMP exposé sous forme d’événements plutôt que caché, messages retenus, Last Will and Testament, abonnements avec jokers et sessions reprenables. La version 5 ajoute les codes de raison, les propriétés utilisateur, les alias de topics, les abonnements partagés et l’aller-retour AUTH.

Voir le client MQTT →
AMQP 0.9.1 & 1.0

Deux protocoles qui partagent un nom

TsgcWSPClient_AMQP parle AMQP 0.9.1, le protocole pour lequel RabbitMQ a été conçu : canaux, déclaration d’exchanges et de files, bindings, consommateurs, acquittements côté éditeur, QoS de prefetch et transactions. TsgcWSPClient_AMQP1 parle AMQP 1.0, le standard OASIS derrière Azure Service Bus et Event Hubs : containers, sessions, liens émetteur et récepteur, contrôle de flux à crédits, SASL et les utilitaires Claims-Based Security. Format binaire différent, modèle objet différent, il y a donc un composant pour chacun.

AMQP 0.9.1 → AMQP 1.0 →
Apache Kafka

Le protocole binaire, parlé en direct

TsgcWSPClient_Kafka parle le protocole binaire de Kafka sur TCP, y compris le format de lot d’enregistrements v2. Produis avec le niveau d’acks de ton choix et la compression gzip, consomme via un groupe où la découverte du coordinateur, l’adhésion, la synchronisation, le heartbeat et le rééquilibrage sont pris en charge pour toi, ou lis une partition par offset.

Voir le client Kafka →
STOMP 1.0 à 1.2

Un client générique, deux dialectes de brokers

TsgcWSPClient_STOMP gère SEND, SUBSCRIBE, UNSUBSCRIBE, ACK, NACK, les reçus, le heart-beating bidirectionnel et les trames de transaction BEGIN, COMMIT et ABORT. Deux descendants transforment les conventions de destination des brokers en méthodes nommées, un pour RabbitMQ et un pour ActiveMQ.

Voir les clients STOMP →
Multiplateforme

Six cibles, sans astérisque

Les sept clients et le support de transport en dessous sont enregistrés pour Win32, Win64, Linux64, macOS, iOS et Android, de Delphi 7 à RAD Studio 13 et sur C++ Builder. Le pack de messagerie ne porte aucune restriction de plateforme.

La matrice des fonctionnalités →

Les pages de référence de chaque composant :

Quatre protocoles, la même forme

Crée le composant de protocole, assigne le support de transport, branche les événements, appelle les verbes. Passer d’un écouteur en clair à un écouteur chiffré, c’est un numéro de port et TLS := True sur le support de transport, et rien ne change au-dessus.

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;

La même forme en Object Pascal et en C++ Builder, et la même forme pour les trois autres composants. La matrice complète des fonctionnalités →

Deux choses à savoir d’abord

Ce que sgcMQ attend de toi, et comment les octets atteignent le broker. Les deux réponses sont courtes, et les deux sont sur cette page plutôt qu’en petits caractères.

Écouteurs natifs des brokers
protocole           composant                       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

* selon l’écouteur chiffré configuré sur le broker lui-même.
  Ce sont les valeurs par défaut conventionnelles. Le Port du
  support de transport accepte ce que ton déploiement écoute
  réellement.

sgcMQ est autonome

Tout ce dont les composants ont besoin est inclus dans sgcMQ : le runtime sgcWebSockets Core, le support de transport TsgcTCPClient, la couche TLS et les utilitaires JSON. Un seul installateur, le code source complet dans la boîte.

Du TCP simple et du TLS, et rien d’autre

Chaque protocole du pack circule sur un socket brut, ouvert en clair ou enveloppé dans du TLS. Cela couvre les ports natifs des brokers listés ici, c’est ainsi que MQTT, AMQP, Kafka et STOMP sont normalement déployés. Faire tourner un protocole sur WebSocket à la place, par exemple MQTT sur WebSocket ou Web-STOMP, nécessite le client WebSocket, et celui-ci est livré avec sgcWebSockets. Vérifie quel transport ton broker expose avant de choisir.

Delphi et C++ Builder

sgcMQ cible Delphi 7 à RAD Studio 13 et C++ Builder, sur les six plateformes. Il n’existe pas de version .NET de ce pack. Si tu as besoin de messagerie depuis .NET, elle se trouve dans sgcWebSockets.

Le support de transport fait la plomberie

TLSOptions.IOHandler choisit OpenSSL pour les builds multiplateformes ou SChannel sous Windows, WatchDog reconnecte après une coupure, et la traversée de proxy HTTP CONNECT comme l’IPv6 ne demandent aucune configuration supplémentaire. Règle-le une fois et chaque protocole au-dessus en hérite.

OpenSSL SChannel TLS mutuel Proxy HTTP Reconnexion WatchDog

Chaque composant et propriété →

sgcMQ implémente les protocoles publiés au lieu d’encapsuler le SDK d’un éditeur, le broker reste donc ton choix : RabbitMQ, Apache Kafka, Eclipse Mosquitto, HiveMQ, EMQX, Apache ActiveMQ, Azure Service Bus et Event Hubs, ou AWS IoT Core. Changer de broker, c’est un hôte, un port et un jeu d’identifiants.

Neuf bibliothèques, une seule boîte à outils

sgcMQ est l’une des neuf bibliothèques de composants eSeGeCe pour Delphi, C++ Builder et .NET. Elles partagent les mêmes conventions, elles sont livrées avec le code source complet et se déploient sans royalties.

sgcMQ

Composants clients MQTT, AMQP 0.9.1 et 1.0, Apache Kafka et STOMP pour Delphi et C++ Builder. Autonome, le runtime sgcWebSockets Core est inclus.

En savoir plus →

sgcWebSockets

WebSocket, HTTP/2, MQTT, AMQP, WebRTC, IA et plus de 30 intégrations d’APIs pour Delphi, C++ Builder, Lazarus et .NET. C’est là que vit le support de transport WebSocket.

En savoir plus →

sgcHTML

Composants HTML et d’interface côté serveur sur Bootstrap 5 et htmx. Mets un tableau de bord en direct devant les files que sgcMQ consomme.

En savoir plus →

sgcQUIC

Transport QUIC pur et un client/serveur HTTP/3, avec WebTransport. Un complément à sgcWebSockets Enterprise.

En savoir plus →

sgcAI

Composants IA, LLM et MCP pour Delphi et C++ Builder. Sept fournisseurs de LLM derrière un seul composant, plus MCP, embeddings et synthèse vocale. Autonome, le runtime sgcWebSockets Core est inclus.

En savoir plus →

sgcOpenAPI

Parser OpenAPI 3.x, générateur natif de SDK Pascal, composant serveur OpenAPI et plus de 1 195 SDK cloud préconçus.

En savoir plus →

sgcSign

XAdES, PAdES, CAdES et ASiC pour les documents, Authenticode, ClickOnce, NuGet et VSIX pour le code.

En savoir plus →

sgcBiometrics

Windows Hello, capteurs d’empreintes digitales et Windows Biometric Framework pour Delphi et C++ Builder.

En savoir plus →

sgcIndy

Composants Indy TCP/IP mis à jour avec TLS moderne, IPv6 et HTTP/2, de Delphi 7 à 13.

En savoir plus →

Voir les tarifs et les licences Télécharger l’essai gratuit

Ce que disent les développeurs

Plébiscité par des développeurs Delphi, C++ Builder, Lazarus et .NET dans le monde entier.

Votre bibliothèque sgcWebSockets est très utile et facile à configurer. Continuez votre excellent travail !

Simone Moretti Développeur Delphi

sgcWebSockets est incroyable et votre support est le meilleur !

Christian Meyer Fondateur & CTO

Merci beaucoup pour votre aide et votre support, j’adore vos composants.

Mark Steinfeld CTO

Tu vois la vue Messagerie d’eSeGeCe.

Montre-moi un autre angle →

Parle à ton broker depuis Delphi

MQTT, AMQP, Kafka et STOMP dans un seul package, implémentés nativement, avec le runtime sgcWebSockets Core inclus et le code source complet dans la boîte. Windows, Linux, macOS, iOS et Android à partir du même code.