sgcMQ: client MQTT, AMQP, Kafka e STOMP per Delphi e C++ Builder
Prodotto autonomo Windows, Linux, macOS, iOS & Android

sgcMQ: client MQTT, AMQP, Kafka e STOMP per Delphi e C++ Builder

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 client STOMP specifici per RabbitMQ e ActiveMQ. Ogni formato binario viene interpretato e scritto in Object Pascal dentro la libreria, quindi non c'è nessuna libreria client esterna, nessuna DLL e nessun wrapper da distribuire. sgcMQ è autonomo, include il runtime sgcWebSockets Core su cui è costruito, quindi non c'è nessuna licenza base da comprare.

Nessuna licenza base richiesta
Codice sorgente completo
Sei target, un solo codice
Un solo vettore TsgcTCPClient TCP semplice o TLS, lo stesso socket per ogni protocollo
MQTT TsgcWSPClient_MQTT
AMQP 0.9.1 TsgcWSPClient_AMQP
AMQP 1.0 TsgcWSPClient_AMQP1
Kafka TsgcWSPClient_Kafka
STOMP TsgcWSPClient_STOMP
STOMP per RabbitMQ TsgcWSPClient_STOMP_RabbitMQ
STOMP per ActiveMQ TsgcWSPClient_STOMP_ActiveMQ
7 Componenti client Una sola pagina nella palette dei componenti
5 Famiglie di protocolli MQTT, AMQP 0.9.1, AMQP 1.0, Kafka, STOMP
6 Piattaforme di destinazione Win32, Win64, Linux64, macOS, iOS, Android
0 Librerie esterne Nessuna librdkafka, nessuna Paho, nessuna Qpid, nessuna DLL
1 Vettore di trasporto Un solo TsgcTCPClient li serve tutti

Due cose che vale la pena sapere subito

Cosa richiede sgcMQ da te, e come i byte arrivano al broker. Entrambe le risposte sono brevi.

★ Nessuna licenza base richiesta

sgcMQ è autosufficiente

Non poggia su un prodotto base. Tutto ciò di cui i componenti hanno bisogno è incluso dentro sgcMQ: il runtime sgcWebSockets Core, il vettore TCP TsgcTCPClient, il livello TLS e le funzioni di supporto JSON. Un solo SKU, un solo installer, niente altro da comprare.

Il codice sorgente completo è incluso in ogni licenza, così le implementazioni dei protocolli si possono seguire passo passo nel tuo debugger invece di sparire dentro un binario.

Ambito del trasporto

sgcMQ è TCP semplice e TLS

Ogni protocollo del pacchetto viaggia su un socket grezzo, aperto in chiaro o avvolto in TLS. Questo copre le porte native dei broker, che è il modo in cui MQTT, AMQP, Kafka e STOMP vengono normalmente installati, e non richiede niente oltre a quello che c'è nella confezione.

Far girare invece un protocollo su WebSocket, per esempio MQTT su WebSocket o Web-STOMP, richiede il client WebSocket, e quello è distribuito con sgcWebSockets, non con sgcMQ. Controlla quale trasporto espone il tuo broker prima di scegliere.

Sette client, cinque famiglie di protocolli

Ognuno è un componente non visuale che metti su una form o crei da codice. Colleghi il vettore tramite la proprietà Client, agganci gli eventi del protocollo, poi chiami i verbi propri del protocollo. La denominazione è coerente su tutti e sette, quindi impararne uno ti porta a buon punto con gli altri.

MQTT1 componente

Pubblica, sottoscrivi e tutto il meccanismo del QoS

TsgcWSPClient_MQTT copre MQTT 3.1.1 e MQTT 5.0 dietro un'unica proprietà MQTTVersion. 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 caratteri jolly e sessioni riprendibili. La versione 5 aggiunge reason code, user property, alias dei topic, sottoscrizioni condivise e lo scambio AUTH per gli schemi a sfida e risposta.

TsgcWSPClient_MQTT MQTT 3.1.1 · MQTT 5.0
AMQP2 componenti

Due protocolli che condividono un nome e nient'altro

TsgcWSPClient_AMQP parla AMQP 0.9.1, il protocollo per cui RabbitMQ è stato costruito: canali, dichiarazione di exchange e code, binding, consumer, conferme del publisher, prefetch QoS e transazioni. TsgcWSPClient_AMQP1 parla AMQP 1.0, lo standard OASIS e ISO/IEC 19464 dietro Azure Service Bus ed Event Hubs: container, sessioni, link sender e receiver, controllo di flusso a credito, SASL e le funzioni di supporto per i token della Claims-Based Security. Formato binario diverso, modello a oggetti diverso, quindi sgcMQ distribuisce un componente per ciascuno invece di fingere che una sola API vada bene per entrambi.

Apache Kafka1 componente

Il protocollo binario, parlato direttamente

TsgcWSPClient_Kafka parla il protocollo binario di Kafka su TCP, incluso il formato record batch v2. Davanti non c'è nessun proxy REST e sotto non c'è nessuna librdkafka. Produci singoli record o batch con un livello di acks scelto da te e compressione gzip, consuma tramite un gruppo in cui la scoperta del coordinatore, il join, la sincronizzazione, gli heartbeat e il rebalance sono gestiti per te, oppure leggi una partizione direttamente per offset. Il commit degli offset, la creazione e la cancellazione dei topic, l'elenco dei gruppi e il sondaggio delle capability del broker sono tutte chiamate di prima classe.

TsgcWSPClient_Kafka Producer · Consumer group · Amministrazione
STOMP3 componenti

Un client generico, due dialetti di broker

TsgcWSPClient_STOMP gestisce STOMP 1.0, 1.1 e 1.2: SEND, SUBSCRIBE, UNSUBSCRIBE, ACK, NACK, ricevute, heart-beating bidirezionale e i frame di transazione BEGIN, COMMIT e ABORT, con le versioni accettate dichiarate tramite Versions. I due discendenti trasformano le convenzioni di destinazione dei broker in metodi con un nome: RabbitMQ ottiene le funzioni per /queue, /topic, /exchange, /amq/queue e /temp-queue, ActiveMQ ottiene le funzioni per code e topic più una proprietà ActiveMQ_Options per gli header propri del broker.

Protocolli pubblicati, quindi il broker lo scegli tu

sgcMQ implementa le specifiche invece di incapsulare l'SDK di un fornitore, quindi qualsiasi cosa parli questi protocolli sul filo è un candidato. Lo stesso componente funziona contro un broker che ospiti tu e un servizio cloud gestito senza modifiche al codice, e cambiare broker è questione di un host, una porta e un insieme di credenziali.

RabbitMQ TsgcWSPClient_AMQP

AMQP 0.9.1 in modo nativo. Anche i plugin STOMP e MQTT sono raggiungibili, ciascuno con il proprio componente.

Apache Kafka TsgcWSPClient_Kafka

Il protocollo binario proprio del broker sulla 9092, e qualsiasi broker compatibile con il protocollo Kafka.

Eclipse Mosquitto TsgcWSPClient_MQTT

Il broker MQTT leggero di riferimento, in chiaro sulla 1883 o in TLS sulla 8883.

HiveMQ TsgcWSPClient_MQTT

MQTT 5.0 completo, incluse le sottoscrizioni condivise e le user property.

EMQX TsgcWSPClient_MQTT

MQTT 3.1.1 e 5.0, ospitato da te o sul cloud del fornitore.

Apache ActiveMQ TsgcWSPClient_STOMP_ActiveMQ

STOMP sulla 61613, oppure AMQP 1.0 contro Artemis con il componente AMQP 1.0.

Azure Service Bus TsgcWSPClient_AMQP1

AMQP 1.0 con le funzioni di supporto per la Claims-Based Security, ed Event Hubs sullo stesso componente.

AWS IoT Core TsgcWSPClient_MQTT

MQTT su TLS con certificati client, configurati tramite le TLSOptions del vettore.

Un solo vettore sotto ogni protocollo

Assegna un TsgcTCPClient alla proprietà Client del componente di protocollo e i frame finiscono direttamente sul socket. Cifratura, attraversamento dei proxy, IPv6 e riconnessione sono impostazioni di quel vettore, quindi si configurano una volta sola e si comportano allo stesso modo che il protocollo sopra di loro sia MQTT, AMQP, Kafka o STOMP.

MQTT 3.1.1 e 5.0 TsgcWSPClient_MQTT
TCP1883Il listener MQTT predefinito.
TLS8883Attiva TLS sul vettore.
AMQP 0.9.1 TsgcWSPClient_AMQP
TCP5672Il listener predefinito di RabbitMQ.
TLS5671Il listener amqps.
AMQP 1.0 TsgcWSPClient_AMQP1
TCP5672Stesso numero di porta, protocollo diverso.
TLS5671Quello che si aspetta Azure Service Bus.
Apache Kafka TsgcWSPClient_Kafka
TCP9092Il listener in chiaro.
TLS9093Qualunque sia la configurazione del listener SSL del broker.
STOMP, plugin RabbitMQ TsgcWSPClient_STOMP_RabbitMQ
TCP61613La porta STOMP nativa.
TLS61614Il listener cifrato del plugin.
STOMP, ActiveMQ TsgcWSPClient_STOMP_ActiveMQ
TCP61613Il connettore STOMP nativo.
TLS61612Il connettore stomp+ssl del broker.

Anche il TsgcWSPClient_STOMP generico usa la 61613, contro qualsiasi broker che supporti STOMP. Questi sono i valori predefiniti convenzionali, e la proprietà Port del vettore accetta qualunque porta la tua installazione stia effettivamente ascoltando.

TLS come preferisci

TLSOptions.IOHandler sceglie OpenSSL per le build multipiattaforma, oppure SChannel su Windows quando preferisci non distribuire affatto i binari di OpenSSL. Il TLS mutuo legge un certificato client da un file PEM, da un bundle PKCS#12 o dall'archivio certificati di Windows.

Riconnessione e keep-alive

Il WatchDog del vettore si riconnette dopo una caduta del collegamento con intervallo e numero di tentativi configurabili, e ogni protocollo aggiunge il proprio meccanismo di liveness: i ping di keep-alive di MQTT, gli heartbeat di AMQP, l'heart-beating di STOMP e gli heartbeat dei consumer group di Kafka.

Proxy e IPv6

Il supporto per i proxy HTTP CONNECT è sul vettore, così un broker dietro a un proxy aziendale resta raggiungibile, e un indirizzo di broker IPv6 non richiede nessuna configurazione aggiuntiva.

Eventi, non un ciclo di polling

La lettura gira su un thread dedicato e i frame in entrata arrivano come eventi tipizzati: OnMQTTPublish, OnAMQPBasicDeliver, OnKafkaMessage, OnSTOMPMessage. Imposta le opzioni di notifica del vettore per farli arrivare sul thread principale nel codice VCL e FMX.

Sottoscrivi e pubblica su MQTT

Abbina un TsgcTCPClient al componente di protocollo, imposta le credenziali, aggancia gli eventi, poi chiama i verbi del protocollo. La stessa struttura in Object Pascal e in C++ Builder, e la stessa struttura per gli altri sei componenti.

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;

Sei target, senza asterischi

Il pacchetto di messaggistica non ha nessuna restrizione di piattaforma. Tutti e sette i client e il vettore sotto di loro sono registrati per ogni target che il compilatore produce, da un servizio Windows a uno smartphone Android, a partire da un unico albero dei sorgenti.

Tutti i 7 client di protocollo MQTT, AMQP 0.9.1, AMQP 1.0, Kafka e i tre client STOMP
Windows Win32 Windows Win64 Linux64 macOS iOS Android
Il vettore TsgcTCPClient Socket, TLS, proxy, IPv6 e riconnessione con WatchDog
Windows Win32 Windows Win64 Linux64 macOS iOS Android
Motore TLS Scelto con TLSOptions.IOHandler
OpenSSL, ogni target SChannel, solo Windows
Supporto IDE Un solo albero dei sorgenti, package di design-time per ogni versione
Da Delphi 7 a 13 C++ Builder
Vettore WebSocket MQTT su WebSocket, Web-STOMP e simili
Non incluso in sgcMQ Serve un package sgcWebSockets

Vedi la tabella completa di standard e piattaforme nella pagina delle funzionalità →

Un package autonomo

sgcMQ viene concesso in licenza da solo, a partire da €249 per un singolo sviluppatore. Tutte le licenze includono il codice sorgente completo, 1 anno di aggiornamenti e uno sconto sul rinnovo dal 50% al 70%: il 50% se rinnovi un pacchetto, il 60% con due, il 70% con tre o più. sgcAI e sgcMQ contano ciascuno come un pacchetto.

sgcMQ

€249

Licenze Single, Team e Site disponibili.

  • Client MQTT 3.1.1 & 5.0
  • Client AMQP 0.9.1 & AMQP 1.0
  • Client Apache Kafka
  • Client STOMP, RabbitMQ & ActiveMQ
  • Runtime sgcWebSockets Core incluso
  • Delphi & C++ Builder, tutti e sei i target
  • Codice sorgente completo
  • 1 anno di aggiornamenti
★ Nessuna licenza base richiesta

sgcMQ include il runtime sgcWebSockets Core, quindi non c'è niente altro da comprare.

Il pagamento elenca due voci: il diritto d'uso del runtime sgcWebSockets Core, addebitato a zero, e il pacchetto sgcMQ stesso. Tutti i dettagli sui prezzi.

3,000+Developers
20+Years
761+Components
30+API Integrations
5Platforms
Garanzia soddisfatti o rimborsati di 30 giorniNon sei soddisfatto? Richiedi un rimborso completo entro 30 giorni dall'acquisto. Vedi la politica di rimborso

Dialoga con il tuo broker da Delphi

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

Altri prodotti di eSeGeCe

Abbina sgcMQ alle nostre altre librerie di componenti per Delphi, C++ Builder e .NET.

sgcWebSockets

La libreria completa: client e server WebSocket, HTTP/2, componenti IoT, P2P e AI. È qui che vive il vettore WebSocket.

Scopri di più →

sgcQUIC

Componenti client e server QUIC (RFC 9000) e HTTP/3 (RFC 9114) costruiti sul motore QUIC nativo di OpenSSL 3.5.

Scopri di più →

sgcAI

Componenti AI, LLM e MCP. Un solo componente di chat raggiunge OpenAI, Anthropic, Gemini, DeepSeek, Ollama, Grok e Mistral.

Scopri di più →

sgcHTML

Componenti HTML/UI lato server e data-aware per Delphi, C++ Builder e .NET, con Bootstrap 5 e htmx.

Scopri di più →

sgcSign

Firme digitali di livello enterprise. XAdES, PAdES, CAdES e ASiC con 10 provider di chiavi e 21 profili per paese dell'UE.

Scopri di più →

sgcOpenAPI

Parser OpenAPI 3.0 e generatore di SDK. Trasforma qualsiasi specifica OpenAPI in un client Delphi fortemente tipizzato in pochi secondi.

Scopri di più →