sgcMQ Ogni broker, un solo vettore. Nessuna DLL da distribuire.

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.

Un singolo package di sgcWebSockets. Vedi i prezzi →
  • MQTT 3.1.1 & 5.0
  • AMQP 0.9.1
  • AMQP 1.0
  • Apache Kafka
  • STOMP da 1.0 a 1.2
  • Delphi da 7 a 13
  • C++ Builder
  • 7Componenti client in una sola pagina della palette
  • 5Famiglie di protocolli, ognuna interpretata in Object Pascal
  • 6Target: Win32, Win64, Linux64, macOS, iOS, Android
  • 0Librerie esterne: nessuna librdkafka, Paho, Qpid o DLL
  • 1Vettore di trasporto per tutti e sette i componenti
Un solo stile di API

Un componente per protocollo. La stessa struttura per tutti e sette.

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.

Un solo schema per ogni broker: un TsgcTCPClient collegato a un componente di protocollo tramite la proprietà Client, su TCP semplice o TLS

Un client TCP, più un componente di protocollo

Il TsgcTCPClient possiede il socket, l'host e la porta. Il componente di protocollo si collega tramite la sua proprietà Client e parla MQTT, AMQP, Kafka o STOMP al di sopra. Passare da un listener semplice a uno cifrato significa cambiare un numero di porta e impostare TLS := True sul vettore, e nulla sopra di esso cambia.

Connessione a un broker MQTT: il codice Delphi accanto allo scambio CONNECT e CONNACK

Connesso in poche righe

Punta il vettore al tuo broker, collega TsgcWSPClient_MQTT, scegli la versione 5 o 3.1.1 con la sola proprietà MQTTVersion e imposta Active a True. Questa è l'intera connessione.

Qualità del servizio MQTT 0, 1 e 2 con lo scambio PUBLISH, PUBACK, PUBREC, PUBREL e PUBCOMP

Tutto il meccanismo QoS, esposto come eventi

QoS 0, 1 e 2, con lo scambio PUBACK, PUBREC, PUBREL e PUBCOMP esposto come eventi invece che nascosto. Messaggi retained, Last Will and Testament, sottoscrizioni con wildcard e sessioni riprendibili sono inclusi.

Impostazioni di produzione sul client TCP: WatchDog, HeartBeat e TLS, con l'autenticazione sul componente di protocollo

Le impostazioni di produzione risiedono sul vettore

WatchDog si riconnette dopo la caduta del collegamento, l'heartbeat lo mantiene attivo e TLS lo cifra. Risiedono sul client TCP, quindi le imposti una sola volta qualunque protocollo ci viaggi sopra. L'autenticazione appartiene al componente di protocollo stesso.

Guardalo in azione

Pubblica e sottoscrivi da Delphi, in pochi minuti.

Una guida rapida con voce narrante e sottotitoli: un solo schema per ogni broker, una connessione MQTT, topic e qualità del servizio, poi le impostazioni che contano in produzione. Non viene scaricato nulla finché non premi play.

Guida rapida di sgcMQ

Connettiti a un broker, sottoscrivi un filtro di topic e pubblica, da Delphi.

  1. Un solo schema, ogni brokerCrea un client TCP, che possiede il socket, l'host e la porta, poi collega un componente di protocollo tramite la proprietà Client.
  2. Connettiti a un broker MQTTPunta il client TCP al broker, collega il componente MQTT, scegli la versione 5 o 3.1.1 e imposta Active a True.
  3. Sottoscrivi e pubblicaSubscribe accetta un filtro di topic e un QoS. Publish accetta un topic, il payload, il QoS e un flag retain. I messaggi arrivano su OnMQTTPublish.
  4. Lo stesso schema per gli altri brokerAMQP 0.9.1 con exchange, code e canali, AMQP 1.0, STOMP con le varianti RabbitMQ e ActiveMQ, e Kafka con consumer group e offset.
  5. Pronto per la produzioneWatchDog, heartbeat e TLS sul client TCP, autenticazione sul componente di protocollo.
Sette componenti

Cinque famiglie di protocolli, implementate in modo nativo.

sgcMQ implementa i protocolli pubblicati invece di incapsulare l'SDK di un fornitore, e ogni licenza include il codice sorgente completo, quindi le implementazioni dei protocolli si possono eseguire passo passo nel tuo debugger.

MQTT 3.1.1 & 5.0

TsgcWSPClient_MQTT copre entrambe le versioni del protocollo con la sola proprietà MQTTVersion: QoS 0, 1 e 2, messaggi retained, Last Will and Testament, sottoscrizioni con wildcard e sessioni riprendibili. La versione 5 aggiunge reason code, user property, topic alias, sottoscrizioni condivise e lo scambio AUTH.

Vedi il client MQTT →

AMQP 0.9.1

TsgcWSPClient_AMQP parla il protocollo per cui è nato RabbitMQ: canali, dichiarazione di exchange e code, binding, consumer, conferme del publisher, QoS di prefetch e transazioni.

Vedi il client AMQP 0.9.1 →

AMQP 1.0

TsgcWSPClient_AMQP1 parla lo standard OASIS alla base di Azure Service Bus ed Event Hubs: container, sessioni, link di sender e receiver, controllo di flusso basato su crediti, SASL e gli helper di Claims-Based Security. Un formato di trasmissione e un modello a oggetti diversi, quindi ha un proprio componente.

Vedi il client AMQP 1.0 →

Apache Kafka

TsgcWSPClient_Kafka parla il protocollo binario di Kafka su TCP, incluso il formato v2 dei record batch. Produci con un livello acks a scelta e compressione gzip, consuma tramite un gruppo in cui rilevamento 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

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 →

Sei target, nessun asterisco

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à →
Il codice

Quattro protocolli, la stessa struttura.

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;
  1. Crea il componente di protocolloUn componente per protocollo: MQTT, AMQP 0.9.1, AMQP 1.0, Kafka, STOMP, STOMP per RabbitMQ e STOMP per ActiveMQ.
  2. Assegna il vettoreImposta la sua proprietà Client su un TsgcTCPClient con l'host e la porta del broker. TLS, proxy e riconnessione si configurano lì, una volta sola.
  3. Collega gli eventiGli eventi di connessione, messaggio e conferma arrivano sul componente, con le proprietà specifiche del protocollo.
  4. Chiama i verbiSubscribe e Publish, DeclareQueue e Consume, Produce e Poll, SubscribeQueue e PublishQueue: i nomi che il protocollo già usa.

La stessa struttura in Object Pascal e in C++ Builder, e la stessa struttura per gli altri tre componenti. La matrice completa delle funzionalità →

Prima di acquistare

Due cose da 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
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 è 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 pacchetto viaggia su un socket grezzo, aperto in chiaro o avvolto in TLS, che è il modo in cui MQTT, AMQP, Kafka e STOMP vengono normalmente distribuiti. Eseguire un protocollo su WebSocket, ad esempio MQTT su WebSocket o Web-STOMP, richiede il client WebSocket, che è incluso in 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.

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.

Parte di sgcWebSockets

Un singolo package di sgcWebSockets, con licenza propria.

sgcMQ include il runtime di sgcWebSockets Core su cui è costruito, quindi non serve nessun'altra licenza eSeGeCe. Ogni licenza comprende il codice sorgente completo e la distribuzione senza royalty su tutti e sei i target.

Single

1 licenza sviluppatore. Uso su una macchina alla volta.

€249

Team

2 licenze sviluppatore. Uso su due macchine alla volta.

€399

Site

Sviluppatori illimitati. Tutte le macchine aziendali.

€649

Componenti client MQTT, AMQP 0.9.1 e 1.0, Apache Kafka e STOMP per Delphi e C++ Builder, con il runtime di sgcWebSockets Core incluso. Servono anche i trasporti WebSocket o .NET? Sono inclusi in sgcWebSockets.

Vedi prezzi e licenze
TESTIMONIANZE

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 Sviluppatore Delphi
sgcWebSockets è straordinario e il vostro supporto è il migliore!
Christian Meyer Fondatore e CTO
Grazie mille per il vostro aiuto e supporto, adoro i vostri componenti.
Mark Steinfeld CTO

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.

Altro da eSeGeCe

Altri prodotti di eSeGeCe

sgcMQ condivide le convenzioni con le altre librerie di componenti eSeGeCe per Delphi, C++ Builder e .NET. Includono il sorgente completo e si distribuiscono senza royalty.

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.

sgcAuth

Client OAuth2, client JWT e supporto WebAuthn per Delphi e C++ Builder. Autonomo, con il runtime sgcWebSockets Core incluso.

sgcHTTP

Server HTTP, client HTTP/2, client gRPC e client Google Cloud Pub/Sub, Calendar e FCM per Delphi e C++ Builder. Autonomo, il runtime sgcWebSockets Core è incluso.

sgcREST

Componenti server REST, server OpenAPI e client OpenAPI per Delphi e C++ Builder. Autonomo, con il runtime di sgcWebSockets Core incluso.

sgcAI

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

sgcHTML

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

sgcQUIC

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

sgcOpenAPI

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

sgcSign

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

sgcPDF

Crea, modifica, visualizza, firma, oscura e convalida file PDF in puro Object Pascal, senza alcuna DLL da distribuire. Con licenza a parte.

sgcBiometrics

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

sgcIndy

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

Le ultime dal blog

Vedi tutti gli articoli →

Stai vedendo la visione sgcMQ di eSeGeCe.

Mostrami un altro punto di vista →
Garanzia soddisfatti o rimborsati di 30 giorniNon sei soddisfatto? Richiedi un rimborso completo entro 30 giorni dall'acquisto. Vedi la politica di rimborso