eSeGeCe — Componenti di comunicazione enterprise per Delphi e .NET
IN EVIDENZA · sgcMQ

Ogni broker, un solo vettore

Sette componenti client parlano MQTT 3.1.1 e 5.0, AMQP 0.9.1, AMQP 1.0, il protocollo binario di Apache Kafka e STOMP dalla 1.0 alla 1.2, con dialetti broker per RabbitMQ e ActiveMQ. Ogni frame viene interpretato e scritto in Object Pascal dentro la libreria, quindi non c'è nessuna librdkafka, nessun Paho, nessun Qpid e nessuna DLL da distribuire. Tutti e sette viaggiano su un unico TsgcTCPClient, aperto in chiaro o cifrato con TLS.

  • 7 componenti client
  • 5 famiglie di protocolli
  • Windows · Linux · macOS · iOS · Android
  • Delphi da 7 a 13 · C++ Builder

Cinque famiglie di protocolli, sette componenti

sgcMQ è un package autonomo. Include il runtime sgcWebSockets Core su cui è costruito, e ogni licenza viene fornita con il codice sorgente completo, così puoi seguire le implementazioni dei protocolli passo passo nel tuo debugger.

7 Componenti client MQTT, AMQP 0.9.1, AMQP 1.0, Kafka, STOMP, STOMP RabbitMQ e STOMP ActiveMQ, su un'unica pagina della palette.
5 Famiglie di protocolli Ogni formato binario interpretato e scritto in Object Pascal, dentro la libreria.
6 Piattaforme target Win32, Win64, Linux64, macOS, iOS e Android, da un unico albero di sorgenti.
0 Librerie esterne Niente librdkafka, niente Paho, niente Qpid, nessuna DLL e nessun proxy REST davanti.
1 Vettore di trasporto Un solo TsgcTCPClient trasporta tutti e sette, così TLS, proxy e riconnessione si configurano una volta sola.
sgcMQ

Client di code di messaggi e streaming per Delphi e C++ Builder. Un package autonomo con il runtime sgcWebSockets Core incluso, codice sorgente completo e distribuzione senza royalty su tutti e sei i target.

Un componente per protocollo, un solo stile di API

Trascina il componente di protocollo su un form, assegna un TsgcTCPClient alla sua proprietà Client, collega gli eventi e poi chiama i verbi propri del protocollo. La nomenclatura è coerente in tutti e sette, quindi impararne uno ti porta già a buon punto con gli altri.

MQTT 3.1.1 & 5.0

Publish, Subscribe e tutta la meccanica del QoS

TsgcWSPClient_MQTT copre entrambe le versioni del protocollo dietro un'unica proprietà MQTTVersion. QoS 0, 1 e 2 con lo scambio PUBACK, PUBREC, PUBREL e PUBCOMP esposto come eventi anziché nascosto, messaggi retained, Last Will and Testament, sottoscrizioni con wildcard e sessioni riprendibili. La versione 5 aggiunge reason code, user property, alias dei topic, sottoscrizioni condivise e il round trip AUTH.

Vedi il client MQTT →
AMQP 0.9.1 & 1.0

Due protocolli che condividono un nome

TsgcWSPClient_AMQP parla AMQP 0.9.1, il protocollo per cui è nato RabbitMQ: canali, dichiarazione di exchange e code, binding, consumer, conferme di pubblicazione, QoS con prefetch e transazioni. TsgcWSPClient_AMQP1 parla AMQP 1.0, lo standard OASIS dietro Azure Service Bus ed Event Hubs: container, sessioni, link sender e receiver, controllo di flusso a crediti, SASL e le funzioni di supporto per la Claims-Based Security. Formato binario diverso, modello a oggetti diverso, quindi c'è un componente per ciascuno.

AMQP 0.9.1 → AMQP 1.0 →
Apache Kafka

Il protocollo binario, parlato direttamente

TsgcWSPClient_Kafka parla il protocollo binario di Kafka su TCP, incluso il formato record batch v2. Produci con il livello di acks scelto e compressione gzip, consuma tramite un gruppo dove scoperta del coordinatore, join, sync, heartbeat e rebalance sono gestiti per te, oppure leggi una partizione per offset.

Vedi il client Kafka →
STOMP da 1.0 a 1.2

Un client generico, due dialetti broker

TsgcWSPClient_STOMP gestisce SEND, SUBSCRIBE, UNSUBSCRIBE, ACK, NACK, le ricevute, l'heart-beating bidirezionale e i frame di transazione BEGIN, COMMIT e ABORT. Due discendenti trasformano le convenzioni di destinazione dei broker in metodi con nome, uno per RabbitMQ e uno per ActiveMQ.

Vedi i client STOMP →
Multipiattaforma

Sei target, senza asterischi

Tutti e sette i client e il vettore sotto di loro sono registrati per Win32, Win64, Linux64, macOS, iOS e Android, da Delphi 7 a RAD Studio 13 e su C++ Builder. Il package di messaggistica non ha restrizioni di piattaforma.

La matrice delle funzionalità →

Pagine di riferimento per ogni componente:

Quattro protocolli, la stessa forma

Crea il componente di protocollo, assegna il vettore, aggancia gli eventi, chiama i verbi. Passare da un listener in chiaro a uno cifrato è un numero di porta e TLS := True sul vettore, e nulla sopra di esso cambia.

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 stessa forma in Object Pascal e in C++ Builder, e la stessa forma per gli altri tre componenti. La matrice completa delle funzionalità →

Due cose che vale la pena sapere prima

Cosa ti serve per usare sgcMQ e come i byte raggiungono il broker. Entrambe le risposte sono brevi, ed entrambe sono su questa pagina invece che scritte in piccolo.

Listener nativi dei broker
protocollo          componente                      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

* qualunque porta sia configurata per il listener cifrato del
  broker stesso. Questi sono i valori predefiniti convenzionali.
  La proprietà Port del vettore accetta qualunque porta la tua
  installazione stia effettivamente ascoltando.

sgcMQ è autonomo

Tutto ciò di cui i componenti hanno bisogno è incluso dentro sgcMQ: il runtime sgcWebSockets Core, il vettore TsgcTCPClient, il livello TLS e le funzioni di supporto JSON. Un solo installer, codice sorgente completo nella confezione.

TCP in chiaro e TLS, e solo quello

Ogni protocollo del package viaggia su un socket puro, aperto in chiaro o cifrato con TLS. Questo copre le porte native dei broker elencate qui, che è il modo in cui MQTT, AMQP, Kafka e STOMP vengono normalmente installati. Far girare un protocollo su WebSocket, per esempio MQTT su WebSocket o Web-STOMP, richiede invece il client WebSocket, che viene fornito con sgcWebSockets. Verifica quale trasporto espone il tuo broker prima di scegliere.

Delphi e C++ Builder

sgcMQ supporta da Delphi 7 a RAD Studio 13 e C++ Builder, su tutte e sei le piattaforme. Non esiste una build .NET di questo package. Se ti serve la messaggistica da .NET, la trovi in sgcWebSockets.

Il vettore si occupa dell'idraulica

TLSOptions.IOHandler sceglie OpenSSL per le build multipiattaforma o SChannel su Windows, WatchDog riconnette dopo una caduta del collegamento, e l'attraversamento di proxy HTTP CONNECT e IPv6 non richiedono configurazione aggiuntiva. Impostalo una volta e ogni protocollo sopra di esso lo eredita.

OpenSSL SChannel Mutual TLS Proxy HTTP Riconnessione WatchDog

Ogni componente e proprietà →

sgcMQ implementa i protocolli pubblicati invece di incapsulare l'SDK di un fornitore, quindi il broker lo scegli tu: RabbitMQ, Apache Kafka, Eclipse Mosquitto, HiveMQ, EMQX, Apache ActiveMQ, Azure Service Bus ed Event Hubs, oppure AWS IoT Core. Cambiare broker è un host, una porta e un set di credenziali.

Nove librerie, una sola cassetta degli attrezzi

sgcMQ è una delle nove librerie di componenti eSeGeCe per Delphi, C++ Builder e .NET. Condividono le convenzioni, vengono fornite con il sorgente completo e si distribuiscono senza royalty.

sgcMQ

Componenti client MQTT, AMQP 0.9.1 e 1.0, Apache Kafka e STOMP per Delphi e C++ Builder. Autonomo, con il runtime sgcWebSockets Core incluso.

Scopri di più →

sgcWebSockets

WebSocket, HTTP/2, MQTT, AMQP, WebRTC, IA e oltre 30 integrazioni API per Delphi, C++ Builder, Lazarus e .NET. È qui che vive il vettore WebSocket.

Scopri di più →

sgcHTML

Componenti HTML e UI lato server su Bootstrap 5 e htmx. Metti una dashboard in tempo reale davanti alle code che sgcMQ consuma.

Scopri di più →

sgcQUIC

Trasporto QUIC puro e un client e server HTTP/3, con WebTransport. Un componente aggiuntivo per sgcWebSockets Enterprise.

Scopri di più →

sgcAI

Componenti AI, LLM e MCP per Delphi e C++ Builder. Sette provider LLM dietro un unico componente, più MCP, embeddings e voce. Autonomo, con il runtime sgcWebSockets Core incluso.

Scopri di più →

sgcOpenAPI

Parser OpenAPI 3.x, generatore di SDK Pascal nativi, componente server OpenAPI e oltre 1.195 SDK cloud già pronti.

Scopri di più →

sgcSign

XAdES, PAdES, CAdES e ASiC per i documenti, Authenticode, ClickOnce, NuGet e VSIX per il codice.

Scopri di più →

sgcBiometrics

Windows Hello, sensori di impronte digitali e il Windows Biometric Framework per Delphi e C++ Builder.

Scopri di più →

sgcIndy

Componenti TCP/IP Indy aggiornati con TLS moderno, IPv6 e HTTP/2 per Delphi da 7 a 13.

Scopri di più →

Vedi prezzi e licenze Scarica la versione di prova

Cosa dicono gli sviluppatori

La scelta di sviluppatori Delphi, C++ Builder, Lazarus e .NET in tutto il mondo.

La vostra libreria sgcWebSockets è molto utile e semplice da configurare. Continuate così!

Simone Moretti Delphi Developer

sgcWebSockets è straordinario e il vostro supporto è il migliore!

Christian Meyer Founder & CTO

Grazie mille per il vostro aiuto e supporto, adoro i vostri componenti.

Mark Steinfeld CTO

Questa è la vista Messaggistica di eSeGeCe.

Mostrami un altro punto di vista →

Parla con il tuo broker da Delphi

MQTT, AMQP, Kafka e STOMP in un unico package, implementati nativamente, con il runtime sgcWebSockets Core incluso e il codice sorgente completo nella confezione. Windows, Linux, macOS, iOS e Android dallo stesso codice.