sgcMQ : clients MQTT, AMQP, Kafka et STOMP pour Delphi et C++ Builder
Produit autonome Windows, Linux, macOS, iOS et Android

sgcMQ : clients MQTT, AMQP, Kafka et STOMP pour Delphi et C++ Builder

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 clients STOMP propres à RabbitMQ et ActiveMQ. Chaque format binaire est analysé et écrit en Object Pascal dans la bibliothèque, il n'y a donc aucune bibliothèque cliente externe, aucune DLL et aucun wrapper à distribuer. sgcMQ est autonome, il inclut le runtime sgcWebSockets Core sur lequel il repose, il n'y a donc aucune licence de base à acheter.

Aucune licence de base requise
Code source complet
Six cibles, une seule base de code
Un seul support de transport TsgcTCPClient TCP simple ou TLS, le même socket pour chaque protocole
MQTT TsgcWSPClient_MQTT
AMQP 0.9.1 TsgcWSPClient_AMQP
AMQP 1.0 TsgcWSPClient_AMQP1
Kafka TsgcWSPClient_Kafka
STOMP TsgcWSPClient_STOMP
STOMP pour RabbitMQ TsgcWSPClient_STOMP_RabbitMQ
STOMP pour ActiveMQ TsgcWSPClient_STOMP_ActiveMQ
7 Composants clients Une seule page sur la palette de composants
5 Familles de protocoles MQTT, AMQP 0.9.1, AMQP 1.0, Kafka, STOMP
6 Plateformes cibles Win32, Win64, Linux64, macOS, iOS, Android
0 Bibliothèques externes Pas de librdkafka, pas de Paho, pas de Qpid, pas de DLL
1 Support de transport Un seul TsgcTCPClient les sert tous

Deux choses à savoir d'abord

Ce que sgcMQ attend de toi, et comment les octets atteignent le broker. Les deux réponses sont courtes.

★ Aucune licence de base requise

sgcMQ est autonome

Il ne repose pas sur un produit de base. Tout ce dont les composants ont besoin est inclus dans sgcMQ : le runtime sgcWebSockets Core, le support de transport TCP TsgcTCPClient, la couche TLS et les utilitaires JSON. Une seule référence, un seul installateur, rien d'autre à acheter.

Le code source complet accompagne chaque licence, les implémentations des protocoles se tracent donc dans ton propre débogueur au lieu de disparaître dans un binaire.

Portée du transport

sgcMQ, c'est du TCP simple et du TLS

Chaque protocole du pack circule sur un socket brut, ouvert en clair ou enveloppé dans du TLS. Cela couvre les ports natifs des brokers, c'est ainsi que MQTT, AMQP, Kafka et STOMP sont normalement déployés, et cela ne demande rien de plus que ce qui est dans la boîte.

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, pas avec sgcMQ. Vérifie quel transport ton broker expose avant de choisir.

Sept clients, cinq familles de protocoles

Chacun est un composant non visuel que tu déposes sur une fiche ou que tu crées en code. Tu attaches le support de transport via la propriété Client, tu branches les événements du protocole, puis tu appelles les verbes propres au protocole. Le nommage est cohérent sur les sept, en apprendre un t'emmène donc très loin sur les autres.

MQTT1 composant

Publier, s'abonner et toute la mécanique de QoS

TsgcWSPClient_MQTT couvre MQTT 3.1.1 et MQTT 5.0 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 pour les schémas défi/réponse.

TsgcWSPClient_MQTT MQTT 3.1.1 · MQTT 5.0
AMQP2 composants

Deux protocoles qui partagent un nom et rien d'autre

TsgcWSPClient_AMQP parle AMQP 0.9.1, le protocole pour lequel RabbitMQ a été bâti : canaux, déclaration d'exchanges et de files d'attente, liaisons, consommateurs, acquittements de publication, QoS de prélecture et transactions. TsgcWSPClient_AMQP1 parle AMQP 1.0, le standard OASIS et ISO/IEC 19464 derrière Azure Service Bus et Event Hubs : conteneurs, sessions, liens émetteurs et récepteurs, contrôle de flux par crédits, SASL et les utilitaires de jetons Claims-Based Security. Format binaire différent, modèle d'objets différent, sgcMQ livre donc un composant pour chacun au lieu de prétendre qu'une seule API convient aux deux.

Apache Kafka1 composant

Le protocole binaire, parlé directement

TsgcWSPClient_Kafka parle le protocole binaire de Kafka sur TCP, y compris le format de lot d'enregistrements v2. Il n'y a aucun proxy REST devant ni librdkafka en dessous. Produis des enregistrements isolés ou des lots avec le niveau d'acquittement 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 directement par offset. La validation d'offset, la création et la suppression de topics, le listage des groupes et la sonde des capacités du broker sont tous des appels de premier ordre.

TsgcWSPClient_Kafka Producteur · Groupes de consommateurs · Admin
STOMP3 composants

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

TsgcWSPClient_STOMP gère STOMP 1.0, 1.1 et 1.2 : SEND, SUBSCRIBE, UNSUBSCRIBE, ACK, NACK, accusés de réception, heart-beating bidirectionnel et les trames de transaction BEGIN, COMMIT et ABORT, les versions acceptées étant annoncées via Versions. Les deux descendants transforment les conventions de destination des brokers en méthodes nommées : RabbitMQ reçoit des utilitaires /queue, /topic, /exchange, /amq/queue et /temp-queue, ActiveMQ reçoit des utilitaires de files d'attente et de topics plus une propriété ActiveMQ_Options pour les en-têtes propres au broker.

Des protocoles publiés, le broker reste ton choix

sgcMQ implémente les spécifications au lieu d'encapsuler le SDK d'un éditeur, tout ce qui parle ces protocoles sur le fil est donc candidat. Le même composant fonctionne face à un broker auto-hébergé comme face à un service cloud géré, sans changement de code, et changer de broker se résume à un hôte, un port et un jeu d'identifiants.

RabbitMQ TsgcWSPClient_AMQP

AMQP 0.9.1 nativement. Les plugins STOMP et MQTT sont aussi accessibles, chacun avec son propre composant.

Apache Kafka TsgcWSPClient_Kafka

Le protocole binaire propre au broker sur le port 9092, et tout broker compatible avec le protocole Kafka.

Eclipse Mosquitto TsgcWSPClient_MQTT

Le broker MQTT léger de référence, en clair sur 1883 ou en TLS sur 8883.

HiveMQ TsgcWSPClient_MQTT

MQTT 5.0 complet, y compris les abonnements partagés et les propriétés utilisateur.

EMQX TsgcWSPClient_MQTT

MQTT 3.1.1 et 5.0, auto-hébergé ou sur le cloud de l'éditeur.

Apache ActiveMQ TsgcWSPClient_STOMP_ActiveMQ

STOMP sur 61613, ou AMQP 1.0 face à Artemis avec le composant AMQP 1.0.

Azure Service Bus TsgcWSPClient_AMQP1

AMQP 1.0 avec les utilitaires Claims-Based Security, et Event Hubs sur le même composant.

AWS IoT Core TsgcWSPClient_MQTT

MQTT sur TLS avec certificats client, configuré via les TLSOptions du support de transport.

Un seul support de transport sous chaque protocole

Assigne un TsgcTCPClient à la propriété Client du composant de protocole et les trames partent directement sur le socket. Le chiffrement, la traversée de proxy, l'IPv6 et la reconnexion sont des réglages de ce support de transport, ils se configurent donc une seule fois et se comportent à l'identique, que le protocole au-dessus soit MQTT, AMQP, Kafka ou STOMP.

MQTT 3.1.1 et 5.0 TsgcWSPClient_MQTT
TCP1883L'écouteur MQTT par défaut.
TLS8883Active TLS sur le support de transport.
AMQP 0.9.1 TsgcWSPClient_AMQP
TCP5672L'écouteur par défaut de RabbitMQ.
TLS5671L'écouteur amqps.
AMQP 1.0 TsgcWSPClient_AMQP1
TCP5672Même numéro de port, protocole différent.
TLS5671Ce qu'attend Azure Service Bus.
Apache Kafka TsgcWSPClient_Kafka
TCP9092L'écouteur en clair.
TLS9093Ce que le broker a configuré comme écouteur SSL.
STOMP, plugin RabbitMQ TsgcWSPClient_STOMP_RabbitMQ
TCP61613Le port STOMP natif.
TLS61614L'écouteur chiffré du plugin.
STOMP, ActiveMQ TsgcWSPClient_STOMP_ActiveMQ
TCP61613Le connecteur STOMP natif.
TLS61612Le connecteur stomp+ssl du broker.

Le TsgcWSPClient_STOMP générique utilise lui aussi 61613, face à n'importe quel broker compatible STOMP. Ce sont les valeurs par défaut conventionnelles, et le Port du support de transport accepte ce que ton déploiement écoute réellement.

Le TLS comme tu le préfères

TLSOptions.IOHandler choisit OpenSSL pour les compilations multiplateformes, ou SChannel sous Windows quand tu préfères ne distribuer aucun binaire OpenSSL. Le TLS mutuel lit un certificat client depuis un fichier PEM, un conteneur PKCS#12 ou le magasin de certificats de Windows.

Reconnexion et keep-alive

Le WatchDog du support de transport reconnecte après une coupure, avec un intervalle et un nombre de tentatives configurables, et chaque protocole ajoute son propre maintien en vie : pings keep-alive MQTT, heartbeats AMQP, heart-beating STOMP et heartbeats des groupes de consommateurs Kafka.

Proxys et IPv6

La prise en charge du proxy HTTP CONNECT se trouve sur le support de transport, un broker derrière un proxy d'entreprise reste donc joignable, et une adresse de broker IPv6 ne demande aucune configuration supplémentaire.

Des événements, pas une boucle de scrutation

La lecture tourne sur son propre thread et les trames entrantes arrivent sous forme d'événements typés : OnMQTTPublish, OnAMQPBasicDeliver, OnKafkaMessage, OnSTOMPMessage. Règle les paramètres de notification du support de transport pour les rapatrier sur le thread principal, en VCL comme en FMX.

S'abonner et publier en MQTT

Associe un TsgcTCPClient au composant de protocole, règle les identifiants, branche les événements, puis appelle les verbes du protocole. La même forme en Object Pascal et en C++ Builder, et la même forme pour les six autres composants.

uses
  sgcTCP_Client_WS, sgcWebSocket_Classes, sgcWebSocket_Types,
  sgcWebSocket_Protocols, sgcWebSocket_Protocol_MQTT_Client,
  sgcWebSocket_Protocol_MQTT_Message;

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);
  MQTT.Publish('devices/sensor-01/status',
    'online', mtqsAtLeastOnce, True);   // retained
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;
// include: sgcTCP_Client_WS.hpp, sgcWebSocket_Protocols.hpp,
// sgcWebSocket_Protocol_MQTT_Client.hpp,
// sgcWebSocket_Protocol_MQTT_Message.hpp

TsgcTCPClient *TCPClient = new TsgcTCPClient(this);   // plain MQTT over TCP
TCPClient->Host = "broker.example.com";
TCPClient->Port = 1883;
TCPClient->WatchDog->Enabled = true;

TsgcWSPClient_MQTT *MQTT = new TsgcWSPClient_MQTT(this);
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;

void __fastcall TForm1::MQTTPublish(TsgcWSConnection *Connection,
    UnicodeString aTopic, UnicodeString aText,
    TsgcWSMQTTPublishProperties PublishProperties)
{
  Memo1->Lines->Add(aTopic + " = " + aText);
}

MQTT->Subscribe("sensors/+/temperature", mtqsAtLeastOnce);
MQTT->Publish("sensors/room1/temperature",
  "{\"value\":22.5,\"unit\":\"C\"}", mtqsAtLeastOnce, true);

// For an encrypted broker: same code, TLS on the carrier.
TCPClient->Port = 8883;
TCPClient->TLS  = true;

Six cibles, sans astérisque

Le pack de messagerie ne porte aucune restriction de plateforme. Les sept clients et le support de transport en dessous sont enregistrés pour chaque cible que produit le compilateur, d'un service Windows à un téléphone Android, à partir d'une seule arborescence source.

Les 7 clients de protocole MQTT, AMQP 0.9.1, AMQP 1.0, Kafka et les trois clients STOMP
Windows Win32 Windows Win64 Linux64 macOS iOS Android
Le support de transport TsgcTCPClient Socket, TLS, proxy, IPv6 et reconnexion WatchDog
Windows Win32 Windows Win64 Linux64 macOS iOS Android
Moteur TLS Choisi avec TLSOptions.IOHandler
OpenSSL, every target SChannel, Windows uniquement
Prise en charge des IDE Une seule arborescence source, packages de conception par version
Delphi 7 to 13 C++ Builder
Support de transport WebSocket MQTT sur WebSocket, Web-STOMP et équivalents
Not in sgcMQ Nécessite un package sgcWebSockets

See the full standards and platform table on the features page →

Un package autonome

sgcMQ se licencie tout seul, à partir de €249 pour un développeur. Toutes les licences incluent le code source complet, 1 an de mises à jour et une remise de renouvellement de 50 % à 70 % : 50 % si tu renouvelles un pack, 60 % pour deux, 70 % pour trois ou plus. sgcAI et sgcMQ comptent chacun pour un pack.

sgcMQ

€249

Licences Single, Team et Site disponibles.

  • Client MQTT 3.1.1 et 5.0
  • Clients AMQP 0.9.1 et AMQP 1.0
  • Client Apache Kafka
  • Clients STOMP, RabbitMQ et ActiveMQ
  • Runtime sgcWebSockets Core inclus
  • Delphi et C++ Builder, les six cibles
  • Code source complet
  • 1 an de mises à jour
★ Aucune licence de base requise

sgcMQ inclut le runtime sgcWebSockets Core, il n'y a donc rien d'autre à acheter.

Le paiement liste deux articles : le droit au runtime sgcWebSockets Core, facturé à zéro, et le pack sgcMQ lui-même. Détail complet des tarifs.

3,000+Developers
20+Years
761+Components
30+API Integrations
5Platforms
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

Dialogue avec ton broker depuis Delphi

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

Autres produits d'eSeGeCe

Associe sgcMQ à nos autres bibliothèques de composants pour Delphi, C++ Builder et .NET.

sgcWebSockets

La bibliothèque complète : clients et serveurs WebSocket, HTTP/2, IoT, P2P et composants d'IA. C'est là que vit le support de transport WebSocket.

En savoir plus →

sgcQUIC

Composants client et serveur QUIC (RFC 9000) et HTTP/3 (RFC 9114) bâtis sur le moteur QUIC natif d'OpenSSL 3.5.

En savoir plus →

sgcAI

Composants IA, LLM et MCP. Un seul composant de chat atteint OpenAI, Anthropic, Gemini, DeepSeek, Ollama, Grok et Mistral.

En savoir plus →

sgcHTML

Composants HTML/UI côté serveur et orientés données pour Delphi, C++ Builder et .NET, avec Bootstrap 5 et htmx.

En savoir plus →

sgcSign

Signatures numériques de niveau entreprise. XAdES, PAdES, CAdES et ASiC avec 10 fournisseurs de clés et 21 profils par pays de l'UE.

En savoir plus →

sgcOpenAPI

Parser OpenAPI 3.0 et générateur de SDK. Transforme n'importe quelle spécification OpenAPI en client Delphi fortement typé en quelques secondes.

En savoir plus →