sgcMQ: clientes MQTT, AMQP, Kafka y STOMP para Delphi y C++ Builder
Producto independiente Windows, Linux, macOS, iOS y Android

sgcMQ: clientes MQTT, AMQP, Kafka y STOMP para Delphi y C++ Builder

Siete componentes cliente hablan MQTT 3.1.1 y 5.0, AMQP 0.9.1, AMQP 1.0, el protocolo binario de Apache Kafka y STOMP 1.0 a 1.2, con clientes STOMP específicos para RabbitMQ y ActiveMQ. Cada formato de trama se analiza y se escribe en Object Pascal dentro de la propia librería, así que no hay librería cliente externa, ni DLL, ni wrapper que distribuir. sgcMQ es independiente, incluye el runtime sgcWebSockets Core sobre el que está construido, así que no hay ninguna licencia base que comprar.

Sin licencia base
Código fuente completo
Seis plataformas, un solo código
Un solo transporte TsgcTCPClient TCP plano o TLS, el mismo socket para todos los protocolos
MQTT TsgcWSPClient_MQTT
AMQP 0.9.1 TsgcWSPClient_AMQP
AMQP 1.0 TsgcWSPClient_AMQP1
Kafka TsgcWSPClient_Kafka
STOMP TsgcWSPClient_STOMP
STOMP para RabbitMQ TsgcWSPClient_STOMP_RabbitMQ
STOMP para ActiveMQ TsgcWSPClient_STOMP_ActiveMQ
7 Componentes cliente Una sola página en la paleta de componentes
5 Familias de protocolos MQTT, AMQP 0.9.1, AMQP 1.0, Kafka, STOMP
6 Plataformas de destino Win32, Win64, Linux64, macOS, iOS, Android
0 Librerías externas Sin librdkafka, sin Paho, sin Qpid, sin DLL
1 Transporte Un solo TsgcTCPClient sirve a todos

Dos cosas que conviene saber primero

Qué necesita sgcMQ de ti, y cómo llegan los bytes hasta el broker. Las dos respuestas son breves.

★ Sin licencia base

sgcMQ es autocontenido

No se apoya sobre ningún producto base. Todo lo que necesitan los componentes viene incluido dentro de sgcMQ: el runtime sgcWebSockets Core, el transporte TCP TsgcTCPClient, la capa TLS y las utilidades JSON. Un solo SKU, un solo instalador, nada más que comprar.

El código fuente completo se entrega con cada licencia, así que puedes recorrer las implementaciones de los protocolos paso a paso en tu propio depurador en lugar de verlas desaparecer dentro de un binario.

Alcance del transporte

sgcMQ es TCP plano y TLS

Todos los protocolos del paquete viajan sobre un socket en crudo, abierto en plano o envuelto en TLS. Eso cubre los puertos nativos del broker, que es como se despliegan normalmente MQTT, AMQP, Kafka y STOMP, y no necesita nada más allá de lo que ya viene incluido.

Ejecutar un protocolo sobre WebSocket en su lugar, por ejemplo MQTT sobre WebSocket o Web-STOMP, requiere el cliente WebSocket, y ese se entrega con sgcWebSockets, no con sgcMQ. Comprueba qué transporte expone tu broker antes de elegir.

Siete clientes, cinco familias de protocolos

Cada uno es un componente no visual que sueltas en un formulario o creas por código. Enlazas el transporte a través de la propiedad Client, conectas los eventos del protocolo y luego llamas a los verbos propios del protocolo. La nomenclatura es coherente en los siete, así que aprender uno te lleva casi todo el camino con los demás.

MQTT1 componente

Publicar, suscribirse y toda la maquinaria de QoS

TsgcWSPClient_MQTT cubre MQTT 3.1.1 y MQTT 5.0 tras una única propiedad MQTTVersion. QoS 0, 1 y 2 con el intercambio PUBACK, PUBREC, PUBREL y PUBCOMP expuesto como eventos en lugar de oculto, mensajes retenidos, Last Will and Testament, suscripciones con comodines y sesiones reanudables. La versión 5 añade códigos de razón, propiedades de usuario, alias de topic, suscripciones compartidas y el intercambio AUTH para esquemas de desafío y respuesta.

TsgcWSPClient_MQTT MQTT 3.1.1 · MQTT 5.0
AMQP2 componentes

Dos protocolos que comparten nombre y nada más

TsgcWSPClient_AMQP habla AMQP 0.9.1, el protocolo para el que se creó RabbitMQ: canales, declaración de exchanges y colas, bindings, consumidores, confirmaciones de publicación, QoS de prefetch y transacciones. TsgcWSPClient_AMQP1 habla AMQP 1.0, el estándar OASIS e ISO/IEC 19464 que hay detrás de Azure Service Bus y Event Hubs: contenedores, sesiones, enlaces de envío y recepción, control de flujo basado en créditos, SASL y las utilidades de token de Claims-Based Security. Formato de trama distinto, modelo de objetos distinto, así que sgcMQ entrega un componente para cada uno en lugar de fingir que una sola API sirve para ambos.

Apache Kafka1 componente

El protocolo binario, hablado directamente

TsgcWSPClient_Kafka habla el protocolo binario de Kafka sobre TCP, incluido el formato de lotes de registros v2. No hay ningún proxy REST delante ni librdkafka debajo. Produce registros sueltos o lotes con el nivel de acks que elijas y compresión gzip, consume a través de un grupo donde el descubrimiento del coordinador, el join, el sync, el heartbeat y el rebalanceo se gestionan por ti, o lee una partición directamente por offset. El commit de offsets, la creación y borrado de topics, el listado de grupos y el sondeo de capacidades del broker son todas llamadas de primer nivel.

TsgcWSPClient_Kafka Productor · Grupos de consumidores · Administración
STOMP3 componentes

Un cliente genérico, dos dialectos de broker

TsgcWSPClient_STOMP maneja STOMP 1.0, 1.1 y 1.2: SEND, SUBSCRIBE, UNSUBSCRIBE, ACK, NACK, recibos, heart-beating bidireccional y las tramas de transacción BEGIN, COMMIT y ABORT, con las versiones aceptadas anunciadas mediante Versions. Los dos descendientes convierten las convenciones de destinos de cada broker en métodos con nombre: RabbitMQ obtiene utilidades /queue, /topic, /exchange, /amq/queue y /temp-queue, y ActiveMQ obtiene utilidades de cola y topic más una propiedad ActiveMQ_Options para las cabeceras propias del broker.

Protocolos publicados, así que el broker lo eliges tú

sgcMQ implementa las especificaciones en lugar de envolver el SDK de un fabricante, así que cualquier cosa que hable estos protocolos en la red es candidata. El mismo componente funciona contra un broker autoalojado y contra un servicio gestionado en la nube sin cambiar una línea de código, y cambiar de broker es cuestión de un host, un puerto y unas credenciales.

RabbitMQ TsgcWSPClient_AMQP

AMQP 0.9.1 de forma nativa. Los plugins STOMP y MQTT también son accesibles, cada uno con su propio componente.

Apache Kafka TsgcWSPClient_Kafka

El propio protocolo binario del broker en el puerto 9092, y cualquier broker compatible con el protocolo de Kafka.

Eclipse Mosquitto TsgcWSPClient_MQTT

El broker MQTT ligero de referencia, en plano en el 1883 o con TLS en el 8883.

HiveMQ TsgcWSPClient_MQTT

MQTT 5.0 completo, incluidas suscripciones compartidas y propiedades de usuario.

EMQX TsgcWSPClient_MQTT

MQTT 3.1.1 y 5.0, autoalojado o en la nube del fabricante.

Apache ActiveMQ TsgcWSPClient_STOMP_ActiveMQ

STOMP en el 61613, o AMQP 1.0 contra Artemis con el componente de AMQP 1.0.

Azure Service Bus TsgcWSPClient_AMQP1

AMQP 1.0 con las utilidades de Claims-Based Security, y Event Hubs en el mismo componente.

AWS IoT Core TsgcWSPClient_MQTT

MQTT sobre TLS con certificados de cliente, configurado mediante las TLSOptions del transporte.

Un único transporte bajo todos los protocolos

Asigna un TsgcTCPClient a la propiedad Client del componente de protocolo y las tramas van directas al socket. El cifrado, el paso por proxy, IPv6 y la reconexión son ajustes de ese transporte, así que se configuran una sola vez y se comportan igual tanto si el protocolo que va encima es MQTT, AMQP, Kafka o STOMP.

MQTT 3.1.1 y 5.0 TsgcWSPClient_MQTT
TCP1883El listener MQTT por defecto.
TLS8883Activa TLS en el transporte.
AMQP 0.9.1 TsgcWSPClient_AMQP
TCP5672El listener por defecto de RabbitMQ.
TLS5671El listener amqps.
AMQP 1.0 TsgcWSPClient_AMQP1
TCP5672El mismo número de puerto, protocolo distinto.
TLS5671Lo que espera Azure Service Bus.
Apache Kafka TsgcWSPClient_Kafka
TCP9092El listener en texto plano.
TLS9093El que tenga configurado el propio listener SSL del broker.
STOMP, plugin de RabbitMQ TsgcWSPClient_STOMP_RabbitMQ
TCP61613El puerto STOMP nativo.
TLS61614El listener cifrado del plugin.
STOMP, ActiveMQ TsgcWSPClient_STOMP_ActiveMQ
TCP61613El conector STOMP nativo.
TLS61612El conector stomp+ssl del broker.

El TsgcWSPClient_STOMP genérico también usa el 61613, contra cualquier broker con soporte STOMP. Estos son los valores por defecto habituales, y la propiedad Port del transporte acepta el puerto en el que realmente escuche tu despliegue.

TLS como prefieras

TLSOptions.IOHandler elige OpenSSL para compilaciones multiplataforma, o SChannel en Windows cuando prefieres no distribuir binarios de OpenSSL. El TLS mutuo lee un certificado de cliente desde un fichero PEM, un paquete PKCS#12 o el almacén de certificados de Windows.

Reconexión y keep-alive

El WatchDog del transporte reconecta tras una caída del enlace con un intervalo y un número de intentos configurables, y cada protocolo añade su propio mecanismo de vida: pings de keep-alive de MQTT, heartbeats de AMQP, heart-beating de STOMP y heartbeats de grupo de consumidores de Kafka.

Proxies e IPv6

El soporte de proxy HTTP CONNECT está en el transporte, así que un broker detrás de un proxy corporativo es accesible, y una dirección de broker IPv6 no necesita configuración adicional.

Eventos, no un bucle de sondeo

La lectura se ejecuta en su propio hilo y las tramas entrantes llegan como eventos tipados: OnMQTTPublish, OnAMQPBasicDeliver, OnKafkaMessage, OnSTOMPMessage. Ajusta las opciones de notificación del transporte para llevarlos al hilo principal en código VCL y FMX.

Suscribirse y publicar sobre MQTT

Empareja un TsgcTCPClient con el componente de protocolo, pon las credenciales, conecta los eventos y luego llama a los verbos del protocolo. La misma estructura en Object Pascal y en C++ Builder, y la misma estructura para los otros seis componentes.

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;

Seis plataformas, sin asteriscos

El paquete de mensajería no tiene ninguna restricción de plataforma. Los siete clientes y el transporte que hay debajo están registrados para todas las plataformas que produce el compilador, desde un servicio de Windows hasta un móvil Android, a partir de un único árbol de código.

Los 7 clientes de protocolo MQTT, AMQP 0.9.1, AMQP 1.0, Kafka y los tres clientes STOMP
Windows Win32 Windows Win64 Linux64 macOS iOS Android
El transporte TsgcTCPClient Socket, TLS, proxy, IPv6 y reconexión con WatchDog
Windows Win32 Windows Win64 Linux64 macOS iOS Android
Motor TLS Se elige con TLSOptions.IOHandler
OpenSSL, todas las plataformas SChannel, solo Windows
Soporte de IDE Un único árbol de código, paquetes de diseño por versión
Delphi 7 a 13 C++ Builder
Transporte WebSocket MQTT sobre WebSocket, Web-STOMP y similares
No está en sgcMQ Necesita un paquete sgcWebSockets

Ver la tabla completa de estándares y plataformas en la página de características →

Un paquete independiente

sgcMQ se licencia por separado, desde €249 para un solo desarrollador. Todas las licencias incluyen código fuente completo, 1 año de actualizaciones y un descuento de renovación del 50% al 70%: un 50% al renovar un pack, un 60% con dos y un 70% con tres o más. sgcAI y sgcMQ cuentan cada uno como un pack.

sgcMQ

€249

Disponible en licencias Single, Team y Site.

  • Cliente MQTT 3.1.1 y 5.0
  • Clientes AMQP 0.9.1 y AMQP 1.0
  • Cliente Apache Kafka
  • Clientes STOMP, RabbitMQ y ActiveMQ
  • Runtime sgcWebSockets Core incluido
  • Delphi y C++ Builder, las seis plataformas
  • Código fuente completo
  • 1 año de actualizaciones
★ Sin licencia base

sgcMQ incluye el runtime sgcWebSockets Core, así que no hay nada más que comprar.

El pedido muestra dos líneas: el derecho de uso del runtime sgcWebSockets Core, que se factura a cero, y el propio paquete sgcMQ. Todos los detalles de precios.

3,000+Developers
20+Years
761+Components
30+API Integrations
5Platforms
Garantía de devolución de 30 días¿No estás satisfecho? Solicita un reembolso completo en los 30 días posteriores a la compra. Ver política de reembolso

Habla con tu broker desde Delphi

MQTT, AMQP, Kafka y STOMP en un solo paquete, implementados de forma nativa, con el runtime incluido y el código fuente completo dentro. Windows, Linux, macOS, iOS y Android desde el mismo código.

Otros productos de eSeGeCe

Combina sgcMQ con nuestras otras librerías de componentes para Delphi, C++ Builder y .NET.

sgcWebSockets

La librería completa: clientes y servidores WebSocket, HTTP/2, IoT, P2P y componentes de IA. Aquí es donde vive el transporte WebSocket.

Más información →

sgcQUIC

Componentes cliente y servidor de QUIC (RFC 9000) y HTTP/3 (RFC 9114) construidos sobre el motor QUIC nativo de OpenSSL 3.5.

Más información →

sgcAI

Componentes de IA, LLM y MCP. Un solo componente de chat llega a OpenAI, Anthropic, Gemini, DeepSeek, Ollama, Grok y Mistral.

Más información →

sgcHTML

Componentes HTML/UI de servidor conectados a datos para Delphi, C++ Builder y .NET, con Bootstrap 5 y htmx.

Más información →

sgcSign

Firma digital de calidad empresarial. XAdES, PAdES, CAdES y ASiC con 10 proveedores de claves y 21 perfiles de países de la UE.

Más información →

sgcOpenAPI

Parser de OpenAPI 3.0 y generador de SDK. Convierte cualquier especificación OpenAPI en un cliente Delphi fuertemente tipado en segundos.

Más información →