sgcMQ Chaque broker, un seul transport. Aucune DLL à livrer.

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 broker pour RabbitMQ et ActiveMQ. Chaque trame est analysée et écrite en Object Pascal dans la bibliothèque, donc pas de librdkafka, pas de Paho, pas de Qpid et aucune DLL à livrer. Les sept reposent sur un seul TsgcTCPClient, ouvert en clair ou enveloppé dans TLS.

Un package unique de sgcWebSockets. Voir les tarifs →
  • MQTT 3.1.1 & 5.0
  • AMQP 0.9.1
  • AMQP 1.0
  • Apache Kafka
  • STOMP 1.0 à 1.2
  • Delphi 7 à 13
  • C++ Builder
  • 7composants clients sur une seule page de la palette
  • 5familles de protocoles, chacune analysée en Object Pascal
  • 6cibles : Win32, Win64, Linux64, macOS, iOS, Android
  • 0bibliothèques externes : ni librdkafka, ni Paho, ni Qpid, ni DLL
  • 1transport commun aux sept composants
Un seul style d’API

Un composant par protocole. La même forme pour les sept.

Dépose le composant de protocole sur une fiche, affecte un TsgcTCPClient à sa propriété Client , branche les événements, puis appelle les verbes propres au protocole. Les noms sont cohérents pour les sept, donc en apprendre un te fait faire l’essentiel du chemin pour les autres.

Un seul schéma pour chaque broker : un TsgcTCPClient rattaché à un composant de protocole via la propriété Client, en TCP simple ou TLS

Un client TCP, plus un composant de protocole

Le TsgcTCPClient gère le socket, l’hôte et le port. Le composant de protocole s’y rattache par sa propriété Client et parle MQTT, AMQP, Kafka ou STOMP par-dessus. Passer d’un écouteur en clair à un écouteur chiffré, c’est un numéro de port et TLS := True sur le transport, et rien ne change au-dessus.

Connexion à un broker MQTT : le code Delphi à côté de l’échange CONNECT et CONNACK

Connecté en quelques lignes

Pointe le transport vers ton broker, rattache TsgcWSPClient_MQTT, choisis la version 5 ou 3.1.1 avec la propriété MQTTVersion , puis mets Active à True. C’est toute la connexion.

Qualité de service MQTT 0, 1 et 2 avec l’échange PUBLISH, PUBACK, PUBREC, PUBREL et PUBCOMP

Toute la mécanique QoS, exposée sous forme d’événements

QoS 0, 1 et 2, avec l’échange PUBACK, PUBREC, PUBREL et PUBCOMP exposé sous forme d’événements plutôt que masqué. Les messages retenus, le Last Will and Testament, les abonnements avec jokers et les sessions reprenables sont inclus.

Réglages de production sur le client TCP : WatchDog, HeartBeat et TLS, avec l’authentification sur le composant de protocole

Les réglages de production se trouvent sur le transport

WatchDog se reconnecte après une coupure, le heartbeat maintient la liaison et TLS la chiffre. Ils se placent sur le client TCP, donc tu les règles une seule fois quel que soit le protocole au-dessus. L’authentification relève du composant de protocole lui-même.

Regarde-le tourner

Publier et s’abonner depuis Delphi, en quelques minutes.

Un démarrage rapide commenté et sous-titré : un schéma pour chaque broker, une connexion MQTT, les topics et la qualité de service, puis les réglages qui comptent en production. Rien ne se télécharge avant que tu appuies sur lecture.

Démarrage rapide sgcMQ

Connecte-toi à un broker, abonne-toi à un filtre de topics et publie, depuis Delphi.

  1. Un schéma, tous les brokersCrée un client TCP, qui gère le socket, l’hôte et le port, puis rattache un composant de protocole via la propriété Client.
  2. Se connecter à un broker MQTTPointe le client TCP vers le broker, rattache le composant MQTT, choisis la version 5 ou 3.1.1 et mets Active à True.
  3. S’abonner et publierSubscribe prend un filtre de topics et une QoS. Publish prend un topic, la charge utile, la QoS et un indicateur retain. Les messages arrivent sur OnMQTTPublish.
  4. Le même schéma pour les autres brokersAMQP 0.9.1 avec échanges, files et canaux, AMQP 1.0, STOMP avec les variantes RabbitMQ et ActiveMQ, et Kafka avec groupes de consommateurs et offsets.
  5. Prêt pour la productionWatchDog, heartbeat et TLS sur le client TCP, authentification sur le composant de protocole.
Sept composants

Cinq familles de protocoles, implémentées nativement.

sgcMQ implémente les protocoles publiés au lieu d’encapsuler un SDK de fournisseur, et chaque licence inclut le code source complet, donc les implémentations des protocoles se parcourent pas à pas dans ton propre débogueur.

MQTT 3.1.1 & 5.0

TsgcWSPClient_MQTT couvre les deux versions du protocole derrière une seule propriété MQTTVersion : QoS 0, 1 et 2, 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’échange AUTH.

Voir le client MQTT →

AMQP 0.9.1

TsgcWSPClient_AMQP parle le protocole pour lequel RabbitMQ a été conçu : canaux, déclaration d’échanges et de files, liaisons, consommateurs, acquittements de l’éditeur, QoS de prefetch et transactions.

Voir le client AMQP 0.9.1 →

AMQP 1.0

TsgcWSPClient_AMQP1 parle le standard OASIS derrière Azure Service Bus et Event Hubs : conteneurs, sessions, liens d’émetteur et de récepteur, contrôle de flux par crédit, SASL et les assistants Claims-Based Security. Un autre format de trame et un autre modèle objet, d’où son propre composant.

Voir le client AMQP 1.0 →

Apache Kafka

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, le join, le sync, le heartbeat et le rebalance sont gérés pour toi, ou lis une partition par offset.

Voir le client Kafka →

STOMP 1.0 à 1.2

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

Voir les clients STOMP →

Six cibles, sans astérisque

Les sept clients et le transport qui les porte 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 n’a aucune restriction de plateforme.

La matrice des fonctionnalités →
Le code

Quatre protocoles, la même forme.

Crée le composant de protocole, affecte le 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 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;
  1. Crée le composant de protocoleUn composant par protocole : MQTT, AMQP 0.9.1, AMQP 1.0, Kafka, STOMP, STOMP pour RabbitMQ et STOMP pour ActiveMQ.
  2. Affecte le transportAffecte sa propriété Client à un TsgcTCPClient avec l’hôte et le port du broker. TLS, proxy et reconnexion se configurent là, une seule fois.
  3. Branche les événementsLes événements de connexion, de message et d’acquittement arrivent sur le composant, avec les propriétés propres au protocole.
  4. Appelle les verbesSubscribe et Publish, DeclareQueue et Consume, Produce et Poll, SubscribeQueue et PublishQueue : les noms que le protocole utilise déjà.

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 →

Avant d’acheter

Deux choses à savoir d’abord.

Ce dont sgcMQ a besoin de ta part, et comment les octets atteignent le broker. Les deux réponses sont courtes, et toutes deux figurent sur cette page plutôt que dans les petites lignes.

Écouteurs de broker natifs
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 est autonome

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

TCP simple et TLS, et rien d’autre

Chaque protocole du pack repose sur un socket brut, ouvert en clair ou enveloppé dans TLS, ce qui est la façon normale de déployer MQTT, AMQP, Kafka et STOMP. Exécuter un protocole sur WebSocket à la place, par exemple MQTT sur WebSocket ou Web-STOMP, demande le client WebSocket, qui 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 transport s’occupe de la plomberie

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

sgcMQ implémente les protocoles publiés au lieu d’encapsuler un SDK de fournisseur, donc le broker est 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.

Fait partie de sgcWebSockets

Un package unique de sgcWebSockets, sous licence indépendante.

sgcMQ inclut le runtime sgcWebSockets Core sur lequel il repose, donc aucune autre licence eSeGeCe n’est nécessaire. Chaque licence inclut le code source complet et le déploiement sans redevance sur les six cibles.

Single

1 licence développeur. Utilisation sur une machine à la fois.

€249

Team

2 licences développeur. Utilisation sur deux machines à la fois.

€399

Site

Développeurs illimités. Toutes les machines de l’entreprise.

€649

Composants clients MQTT, AMQP 0.9.1 et 1.0, Apache Kafka et STOMP pour Delphi et C++ Builder, avec le runtime sgcWebSockets Core inclus. Besoin aussi des transports WebSocket ou de .NET ? Ils sont livrés avec sgcWebSockets.

Voir les tarifs et les licences
Témoignages

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

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 avec le même code.

Plus de produits eSeGeCe

Autres produits d’eSeGeCe

sgcMQ partage ses conventions avec les autres bibliothèques de composants eSeGeCe pour Delphi, C++ Builder et .NET. Elles sont livrées avec le code source complet et se déploient sans redevance.

sgcWebSockets

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

sgcAuth

Client OAuth2, client JWT et prise en charge de WebAuthn pour Delphi et C++ Builder. Autonome, avec le runtime sgcWebSockets Core inclus.

sgcHTTP

Serveur HTTP, client HTTP/2, client gRPC et clients Google Cloud Pub/Sub, Calendar et FCM pour Delphi et C++ Builder. Autonome, le runtime sgcWebSockets Core est inclus.

sgcREST

Serveur REST, serveur OpenAPI et composants clients OpenAPI pour Delphi et C++ Builder. Autonome, le runtime sgcWebSockets Core est inclus.

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.

sgcHTML

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

sgcQUIC

Transport QUIC brut, client et serveur HTTP/3, avec WebTransport. Un complément de sgcWebSockets Enterprise.

sgcOpenAPI

Analyseur OpenAPI 3.x, générateur de SDK Pascal natif, composant serveur OpenAPI et plus de 1 195 SDK cloud prêts à l’emploi.

sgcSign

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

sgcPDF

Crée, édite, affiche, signe, caviarde et valide des fichiers PDF en pur Object Pascal, sans DLL à déployer. Licence séparée.

sgcBiometrics

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

sgcIndy

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

Les derniers articles du blog

Voir tous les articles →

Tu vois la vue sgcMQ d’eSeGeCe.

Montre-moi un autre angle →
Garantie satisfait ou remboursé de 30 joursPas satisfait ? Demandez un remboursement intégral dans les 30 jours suivant l'achat. Voir la politique de remboursement