eSeGeCe — Componentes de Comunicación Empresarial para Delphi y .NET
DESTACADO · sgcMQ

Cada broker, un solo transporte

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.

  • 7 componentes cliente
  • 5 familias de protocolos
  • Windows · Linux · macOS · iOS · Android
  • Delphi 7 a 13 · C++ Builder

Cinco Familias de Protocolos, Siete Componentes

sgcMQ es un paquete independiente. Incluye el runtime sgcWebSockets Core sobre el que está construido, y cada licencia se entrega con el código fuente completo, así que puedes recorrer las implementaciones de los protocolos en tu propio depurador.

7 Componentes cliente MQTT, AMQP 0.9.1, AMQP 1.0, Kafka, STOMP, STOMP RabbitMQ y STOMP ActiveMQ, en una sola página de paleta.
5 Familias de protocolos Cada formato de red se parsea y se escribe en Object Pascal, dentro de la librería.
6 Plataformas de destino Win32, Win64, Linux64, macOS, iOS y Android, desde un único árbol de código.
0 Librerías externas Sin librdkafka, sin Paho, sin Qpid, sin DLL y sin proxy REST delante.
1 Transporte compartido Un único TsgcTCPClient transporta los siete, así que TLS, el proxy y la reconexión se configuran una sola vez.
sgcMQ

Clientes de colas de mensajes y streaming para Delphi y C++ Builder. Un paquete independiente con el runtime sgcWebSockets Core incluido, código fuente completo y despliegue libre de royalties en los seis destinos.

Un Componente por Protocolo, un Mismo Estilo de API

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.

MQTT 3.1.1 y 5.0

Publicación, Suscripción y Toda la Maquinaria de QoS

TsgcWSPClient_MQTT cubre ambas versiones del protocolo 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 topics, suscripciones compartidas y el intercambio AUTH.

Ver el cliente MQTT →
AMQP 0.9.1 y 1.0

Dos Protocolos que Comparten Nombre

TsgcWSPClient_AMQP habla AMQP 0.9.1, el protocolo para el que se construyó RabbitMQ: canales, declaración de exchanges y colas, bindings, consumidores, confirmaciones de publicador, QoS de prefetch y transacciones. TsgcWSPClient_AMQP1 habla AMQP 1.0, el estándar OASIS detrás de Azure Service Bus y Event Hubs: contenedores, sesiones, enlaces emisores y receptores, control de flujo basado en crédito, SASL y los ayudantes de Claims-Based Security. Distinto formato de red, distinto modelo de objetos, así que hay un componente para cada uno.

AMQP 0.9.1 → AMQP 1.0 →
Apache Kafka

El Protocolo Binario, Hablado Directamente

TsgcWSPClient_Kafka habla el protocolo de red de Kafka sobre TCP, incluido el formato de record batch 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, el join, el sync, 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

Un Cliente Genérico, Dos Dialectos de Broker

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 →
Multiplataforma

Seis Destinos, sin Asteriscos

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 →

Páginas de referencia de cada componente:

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;

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 →

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
protocolo           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

* el que tenga configurado el listener cifrado del propio broker.
  Estos son los valores por convención. El Port del transporte
  acepta el puerto en el que realmente escuche tu despliegue.

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

Cada protocolo del paquete viaja sobre un socket puro, abierto en claro o envuelto en TLS. Eso cubre los puertos nativos de broker listados aquí, que es como se despliegan normalmente MQTT, AMQP, Kafka y STOMP. Ejecutar un protocolo sobre WebSocket en su lugar, por ejemplo MQTT sobre WebSocket o Web-STOMP, necesita el cliente WebSocket, y ese se entrega 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.

OpenSSL SChannel TLS mutuo Proxy HTTP Reconexión WatchDog

Cada componente y propiedad →

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.

Nueve Librerías, una Caja de Herramientas

sgcMQ es una de las nueve librerías de componentes de eSeGeCe para Delphi, C++ Builder y .NET. Comparten convenciones, se entregan con código fuente completo y se despliegan libres de royalties.

sgcMQ

Componentes cliente de MQTT, AMQP 0.9.1 y 1.0, Apache Kafka y STOMP para Delphi y C++ Builder. Producto independiente, con el runtime sgcWebSockets Core incluido.

Más información →

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.

Más información →

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.

Más información →

sgcQUIC

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

Más información →

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.

Más información →

sgcOpenAPI

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

Más información →

sgcSign

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

Más información →

sgcBiometrics

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

Más información →

sgcIndy

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

Más información →

Ver precios y licencias Descargar la prueba gratuita

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

Estás viendo la vista de Mensajería de eSeGeCe.

Muéstrame otro enfoque →

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.