sgcMQ Cada broker, un solo transporte. Sin DLL que distribuir.

Siete componentes cliente hablan MQTT 3.1.1 y 5.0, AMQP 0.9.1, AMQP 1.0, el protocolo de red de Apache Kafka y STOMP 1.0 a 1.2, con dialectos de broker para RabbitMQ y ActiveMQ. Cada frame se parsea y se escribe en Object Pascal dentro de la librería, así que no hay librdkafka, ni Paho, ni Qpid, ni ninguna DLL que distribuir. Los siete viajan sobre un único TsgcTCPClient, abierto en claro o envuelto en TLS.

Un paquete individual de sgcWebSockets. Ver precios →
  • MQTT 3.1.1 y 5.0
  • AMQP 0.9.1
  • AMQP 1.0
  • Apache Kafka
  • STOMP 1.0 a 1.2
  • Delphi 7 a 13
  • C++ Builder
  • 7Componentes cliente en una sola página de la paleta
  • 5Familias de protocolos, cada una analizada en Object Pascal
  • 6Destinos: Win32, Win64, Linux64, macOS, iOS, Android
  • 0Librerías externas: sin librdkafka, Paho, Qpid ni DLL
  • 1Transporte para los siete componentes
Un único estilo de API

Un componente por protocolo. La misma forma para los siete.

Suelta el componente de protocolo en un formulario, asigna un TsgcTCPClient a su propiedad Client , conecta los eventos y llama a los verbos propios del protocolo. La nomenclatura es coherente en los siete, así que aprender uno te deja la mayor parte del camino hecho con el resto.

Un patrón para cada broker: un TsgcTCPClient asociado a un componente de protocolo mediante la propiedad Client, sobre TCP en claro o TLS

Un cliente TCP, más un componente de protocolo

El TsgcTCPClient gestiona el socket, el host y el puerto. El componente de protocolo se conecta mediante su propiedad Client y habla MQTT, AMQP, Kafka o STOMP por encima. Pasar de un listener en claro a uno cifrado es cuestión de un número de puerto y TLS := True en el transporte, y nada por encima cambia.

Conexión a un broker MQTT: el código Delphi junto al intercambio CONNECT y CONNACK

Conectado en un puñado de líneas

Apunta el transporte a tu broker, asocia TsgcWSPClient_MQTT, elige la versión 5 o la 3.1.1 con la propiedad MQTTVersion y pon Active a True. Esa es toda la conexión.

Calidad de servicio de MQTT 0, 1 y 2 con el intercambio PUBLISH, PUBACK, PUBREC, PUBREL y PUBCOMP

Toda la maquinaria de QoS, expuesta como eventos

QoS 0, 1 y 2, con el intercambio PUBACK, PUBREC, PUBREL y PUBCOMP expuesto como eventos en lugar de oculto. Los mensajes retenidos, el Last Will and Testament, las suscripciones con comodines y las sesiones reanudables vienen incluidos.

Ajustes de producción en el cliente TCP: WatchDog, HeartBeat y TLS, con la autenticación en el componente de protocolo

Los ajustes de producción viven en el transporte

WatchDog reconecta tras una caída del enlace, el heartbeat lo mantiene vivo y TLS lo cifra. Están en el cliente TCP, así que los configuras una sola vez sea cual sea el protocolo que se monte encima. La autenticación pertenece al propio componente de protocolo.

Míralo en marcha

Publica y suscríbete desde Delphi, en pocos minutos.

Una guía rápida con narración y subtítulos: un patrón para cada broker, una conexión MQTT, temas y calidad de servicio, y después los ajustes que importan en producción. No se descarga nada hasta que pulsas reproducir.

Guía rápida de sgcMQ

Conéctate a un broker, suscríbete a un filtro de temas y publica, desde Delphi.

  1. Un patrón, todos los brokersCrea un cliente TCP, que gestiona el socket, el host y el puerto, y asocia después un componente de protocolo mediante la propiedad Client.
  2. Conéctate a un broker MQTTApunta el cliente TCP al broker, asocia el componente MQTT, elige la versión 5 o la 3.1.1 y pon Active a True.
  3. Suscribirse y publicarSubscribe recibe un filtro de temas y un QoS. Publish recibe un tema, la carga útil, el QoS y un indicador de retención. Los mensajes llegan en OnMQTTPublish.
  4. El mismo patrón para los demás brokersAMQP 0.9.1 con exchanges, colas y canales, AMQP 1.0, STOMP con las variantes de RabbitMQ y ActiveMQ, y Kafka con grupos de consumidores y offsets.
  5. Listo para producciónWatchDog, heartbeat y TLS en el cliente TCP, autenticación en el componente de protocolo.
Siete componentes

Cinco familias de protocolos, implementadas de forma nativa.

sgcMQ implementa los protocolos publicados en lugar de envolver el SDK de un fabricante, y cada licencia se entrega con el código fuente completo, así que las implementaciones de los protocolos se recorren paso a paso en tu propio depurador.

MQTT 3.1.1 y 5.0

TsgcWSPClient_MQTT cubre ambas versiones del protocolo tras una única propiedad MQTTVersion propiedad: QoS 0, 1 y 2, mensajes retenidos, Last Will and Testament, suscripciones con comodines y sesiones reanudables. La versión 5 añade códigos de motivo, propiedades de usuario, alias de tema, suscripciones compartidas y el intercambio AUTH.

Ver el cliente MQTT →

AMQP 0.9.1

TsgcWSPClient_AMQP habla el protocolo para el que se creó RabbitMQ: canales, declaración de exchanges y colas, bindings, consumidores, confirmaciones del publicador, QoS de prefetch y transacciones.

Ver el cliente AMQP 0.9.1 →

AMQP 1.0

TsgcWSPClient_AMQP1 habla el estándar OASIS en el que se apoyan Azure Service Bus y Event Hubs: contenedores, sesiones, enlaces de emisor y receptor, control de flujo basado en créditos, SASL y los ayudantes de Claims-Based Security. Un formato de red y un modelo de objetos distintos, por lo que tiene su propio componente.

Ver el cliente AMQP 1.0 →

Apache Kafka

TsgcWSPClient_Kafka habla el protocolo binario de Kafka sobre TCP, incluido el formato de lote de registros v2. Produce con el nivel de acks que elijas y compresión gzip, consume a través de un grupo donde el descubrimiento del coordinador, la unión, la sincronización, el heartbeat y el rebalanceo se gestionan por ti, o lee una partición por offset.

Ver el cliente Kafka →

STOMP 1.0 a 1.2

TsgcWSPClient_STOMP gestiona SEND, SUBSCRIBE, UNSUBSCRIBE, ACK, NACK, los recibos, el heart-beating bidireccional y los frames de transacción BEGIN, COMMIT y ABORT. Dos descendientes convierten las convenciones de destinos del broker en métodos con nombre, uno para RabbitMQ y otro para ActiveMQ.

Ver los clientes STOMP →

Seis destinos, sin asterisco

Los siete clientes y el transporte que llevan debajo están registrados para Win32, Win64, Linux64, macOS, iOS y Android, desde Delphi 7 hasta RAD Studio 13 y en C++ Builder. El paquete de mensajería no arrastra ninguna restricción de plataforma.

La matriz de características →
El código

Cuatro protocolos, la misma forma.

Crea el componente de protocolo, asigna el transporte, engancha los eventos y llama a los verbos. Pasar de un listener en claro a uno cifrado es un número de puerto y TLS := True en el transporte, y nada por encima 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 el componente de protocoloUn componente por protocolo: MQTT, AMQP 0.9.1, AMQP 1.0, Kafka, STOMP, STOMP para RabbitMQ y STOMP para ActiveMQ.
  2. Asigna el transporteAsigna su propiedad Client a un TsgcTCPClient con el host y el puerto del broker. TLS, proxy y reconexión se configuran ahí, una sola vez.
  3. Conecta los eventosLos eventos de conexión, mensaje y confirmación llegan en el componente, con las propiedades propias del protocolo.
  4. Llama a los verbosSubscribe y Publish, DeclareQueue y Consume, Produce y Poll, SubscribeQueue y PublishQueue: los nombres que el protocolo ya usa.

La misma forma en Object Pascal y en C++ Builder, y la misma forma para los otros tres componentes. La matriz de características completa →

Antes de comprar

Dos cosas que conviene saber primero.

Qué necesita sgcMQ de ti y cómo llegan los bytes al broker. Las dos respuestas son cortas, y las dos están en esta página en lugar de en la letra pequeña.

Listeners nativos del 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 es independiente

Todo lo que necesitan los componentes viene incluido dentro de sgcMQ: el runtime sgcWebSockets Core, el transporte TsgcTCPClient , la capa TLS y los ayudantes JSON. Un instalador, código fuente completo en la caja.

TCP en claro y TLS, y solo eso

Todos los protocolos del paquete funcionan sobre un socket en bruto, abierto en claro o envuelto en TLS, que es como se despliegan normalmente MQTT, AMQP, Kafka y STOMP. Ejecutar un protocolo sobre WebSocket, por ejemplo MQTT sobre WebSocket o Web-STOMP, requiere el cliente WebSocket, que se incluye con sgcWebSockets. Comprueba qué transporte expone tu broker antes de elegir.

Delphi y C++ Builder

sgcMQ apunta a Delphi 7 hasta RAD Studio 13 y C++ Builder, en las seis plataformas. No hay una compilación .NET de este paquete. Si necesitas mensajería desde .NET, eso vive en sgcWebSockets.

El transporte hace la fontanería

TLSOptions.IOHandler elige OpenSSL para compilaciones multiplataforma o SChannel en Windows, WatchDog reconecta tras una caída del enlace, y el paso por proxy HTTP CONNECT e IPv6 no necesitan configuración extra. Configúralo una vez y cada protocolo por encima lo hereda.

sgcMQ implementa los protocolos publicados en lugar de envolver el SDK de un fabricante, así que el broker lo eliges tú: RabbitMQ, Apache Kafka, Eclipse Mosquitto, HiveMQ, EMQX, Apache ActiveMQ, Azure Service Bus y Event Hubs, o AWS IoT Core. Cambiar de broker es un host, un puerto y unas credenciales.

Parte de sgcWebSockets

Un paquete individual de sgcWebSockets, con licencia propia.

sgcMQ incluye el runtime sgcWebSockets Core sobre el que está construido, así que no hace falta ninguna otra licencia de eSeGeCe. Cada licencia incluye el código fuente completo y la distribución sin royalties en los seis destinos.

Single

Licencia para 1 desarrollador. Uso en una máquina a la vez.

€249

Team

Licencia para 2 desarrolladores. Uso en dos máquinas a la vez.

€399

Site

Desarrolladores ilimitados. Todas las máquinas de la empresa.

€649

Componentes cliente de MQTT, AMQP 0.9.1 y 1.0, Apache Kafka y STOMP para Delphi y C++ Builder, con el runtime sgcWebSockets Core incluido. ¿Necesitas también transportes WebSocket o .NET? Se incluyen con sgcWebSockets.

Ver precios y licencias
Testimonios

Qué Dicen los Desarrolladores

La confianza de desarrolladores de Delphi, C++ Builder, Lazarus y .NET en todo el mundo.

Vuestra librería sgcWebSockets es muy útil y fácil de configurar. ¡Seguid así!
Simone Moretti Desarrollador Delphi
sgcWebSockets es increíble y vuestro soporte es el mejor.
Christian Meyer Fundador y CTO
Muchas gracias por vuestra ayuda y soporte, me encantan vuestros componentes.
Mark Steinfeld CTO

Habla con tu broker desde Delphi.

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

Más de eSeGeCe

Otros productos de eSeGeCe

sgcMQ comparte convenciones con el resto de librerías de componentes de eSeGeCe para Delphi, C++ Builder y .NET. Se entregan con el código fuente completo y se distribuyen sin royalties.

sgcWebSockets

WebSocket, HTTP/2, MQTT, AMQP, WebRTC, IA y más de 30 integraciones de APIs para Delphi, C++ Builder, Lazarus y .NET. Aquí es donde vive el transporte WebSocket.

sgcAuth

Cliente OAuth2, cliente JWT y soporte de WebAuthn para Delphi y C++ Builder. Producto independiente, con el runtime sgcWebSockets Core incluido.

sgcHTTP

Servidor HTTP, cliente HTTP/2, cliente gRPC y clientes de Google Cloud Pub/Sub, Calendar y FCM para Delphi y C++ Builder. Producto independiente, con el runtime sgcWebSockets Core incluido.

sgcREST

Servidor REST, servidor OpenAPI y componentes de cliente OpenAPI para Delphi y C++ Builder. Producto independiente, con el runtime sgcWebSockets Core incluido.

sgcAI

Componentes de IA, LLM y MCP para Delphi y C++ Builder. Siete proveedores de LLM tras un único componente, más MCP, embeddings y voz. Producto independiente, con el runtime sgcWebSockets Core incluido.

sgcHTML

Componentes HTML y de UI en servidor sobre Bootstrap 5 y htmx. Pon un panel en vivo delante de las colas que consume sgcMQ.

sgcQUIC

Transporte QUIC puro y un cliente y servidor HTTP/3, con WebTransport. Un complemento de sgcWebSockets Enterprise.

sgcOpenAPI

Parser de OpenAPI 3.x, generador nativo de SDK Pascal, componente servidor OpenAPI y más de 1.195 SDK de nube preconstruidos.

sgcSign

XAdES, PAdES, CAdES y ASiC para documentos, Authenticode, ClickOnce, NuGet y VSIX para código.

sgcPDF

Crea, edita, visualiza, firma, redacta y valida archivos PDF en Object Pascal puro, sin ninguna DLL que implementar. Con licencia propia.

sgcBiometrics

Windows Hello, sensores de huella dactilar y el Windows Biometric Framework para Delphi y C++ Builder.

sgcIndy

Componentes Indy TCP/IP actualizados con TLS moderno, IPv6 y HTTP/2 para Delphi 7 a 13.

Lo último del blog

Ver todas las publicaciones →

Estás viendo la vista de sgcMQ de eSeGeCe.

Muéstrame otro enfoque →
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