eSeGeCe — Componentes de comunicação de nível empresarial para Delphi e .NET
DESTAQUE · sgcMQ

Todos os brokers, um só transporte

Sete componentes cliente falam MQTT 3.1.1 e 5.0, AMQP 0.9.1, AMQP 1.0, o protocolo de wire do Apache Kafka e STOMP 1.0 a 1.2, com dialetos de broker para RabbitMQ e ActiveMQ. Cada frame é analisado e escrito em Object Pascal dentro da biblioteca, então não há librdkafka, nem Paho, nem Qpid, nem DLL para distribuir. Todos os sete rodam sobre um único TsgcTCPClient, aberto em TCP puro ou envolvido em TLS.

  • 7 componentes cliente
  • 5 famílias de protocolos
  • Windows · Linux · macOS · iOS · Android
  • Delphi 7 ao 13 · C++ Builder

Cinco Famílias de Protocolos, Sete Componentes

O sgcMQ é um pacote autônomo. Ele inclui o runtime sgcWebSockets Core sobre o qual é construído, e toda licença vem com código-fonte completo, então você depura as implementações dos protocolos passo a passo no seu próprio debugger.

7 Componentes cliente MQTT, AMQP 0.9.1, AMQP 1.0, Kafka, STOMP, STOMP RabbitMQ e STOMP ActiveMQ, em uma única página de paleta.
5 Famílias de protocolos Cada formato de wire analisado e escrito em Object Pascal, dentro da biblioteca.
6 Plataformas-alvo Win32, Win64, Linux64, macOS, iOS e Android, a partir de uma única árvore de código-fonte.
0 Bibliotecas externas Sem librdkafka, sem Paho, sem Qpid, sem DLL e sem proxy REST na frente.
1 Transporte Um único TsgcTCPClient transporta todos os sete, então TLS, proxy e reconexão são configurados uma única vez.
sgcMQ

Clientes de filas de mensagens e streaming para Delphi e C++ Builder. Um pacote autônomo com o runtime sgcWebSockets Core incluído, código-fonte completo e implantação sem royalties nos seis alvos.

Um Componente por Protocolo, Um Estilo de API

Solte o componente do protocolo em um formulário, atribua um TsgcTCPClient à sua propriedade Client, conecte os eventos e chame os verbos do próprio protocolo. A nomenclatura é consistente nos sete, então aprender um já te leva quase até o fim dos demais.

MQTT 3.1.1 & 5.0

Publish, Subscribe e Toda a Maquinaria de QoS

TsgcWSPClient_MQTT cobre as duas versões do protocolo por trás de uma única propriedade MQTTVersion. QoS 0, 1 e 2 com a troca PUBACK, PUBREC, PUBREL e PUBCOMP exposta como eventos em vez de escondida, mensagens retidas, Last Will and Testament, assinaturas com curinga e sessões retomáveis. A versão 5 adiciona reason codes, propriedades de usuário, aliases de tópico, assinaturas compartilhadas e a viagem de ida e volta AUTH.

Ver o cliente MQTT →
AMQP 0.9.1 & 1.0

Dois Protocolos Que Compartilham um Nome

TsgcWSPClient_AMQP fala AMQP 0.9.1, o protocolo para o qual o RabbitMQ foi construído: canais, declaração de exchanges e filas, bindings, consumidores, confirmações de publicador, QoS de prefetch e transações. TsgcWSPClient_AMQP1 fala AMQP 1.0, o padrão OASIS por trás do Azure Service Bus e do Event Hubs: containers, sessões, links de envio e recepção, controle de fluxo baseado em crédito, SASL e os auxiliares de Claims-Based Security. Formato de wire diferente, modelo de objetos diferente, então há um componente para cada um.

AMQP 0.9.1 → AMQP 1.0 →
Apache Kafka

O Protocolo Binário, Falado Diretamente

TsgcWSPClient_Kafka fala o protocolo de wire do Kafka sobre TCP, incluindo o formato de record batch v2. Produza com o nível de acks escolhido e compressão gzip, consuma por meio de um grupo em que a descoberta do coordenador, join, sync, heartbeat e rebalanceamento são tratados para você, ou leia uma partição por offset.

Ver o cliente Kafka →
STOMP 1.0 a 1.2

Um Cliente Genérico, Dois Dialetos de Broker

TsgcWSPClient_STOMP trata SEND, SUBSCRIBE, UNSUBSCRIBE, ACK, NACK, recibos, heart-beating bidirecional e os frames de transação BEGIN, COMMIT e ABORT. Dois descendentes transformam as convenções de destino dos brokers em métodos nomeados, um para o RabbitMQ e um para o ActiveMQ.

Ver os clientes STOMP →
Multiplataforma

Seis Alvos, Sem Asterisco

Todos os sete clientes e o transporte por baixo deles estão registrados para Win32, Win64, Linux64, macOS, iOS e Android, do Delphi 7 ao RAD Studio 13 e no C++ Builder. O pacote de mensageria não carrega nenhuma restrição de plataforma.

A matriz de recursos →

Páginas de referência de cada componente:

Quatro Protocolos, a Mesma Forma

Crie o componente do protocolo, atribua o transporte, conecte os eventos, chame os verbos. Trocar de um listener em texto puro para um criptografado é um número de porta e TLS := True no transporte, e nada acima dele muda.

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;

A mesma forma em Object Pascal e em C++ Builder, e a mesma forma para os outros três componentes. A matriz completa de recursos →

Duas Coisas Que Vale Saber Antes

O que o sgcMQ precisa de você, e como os bytes chegam ao broker. As duas respostas são curtas, e as duas estão nesta página, não nas letras miúdas.

Listeners nativos do 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

* a porta que o listener criptografado do próprio broker estiver
  configurado para usar. Estes são os padrões convencionais. A Port
  do transporte aceita a porta que a sua implantação realmente usa.

O sgcMQ é autônomo

Tudo o que os componentes precisam vem embutido no sgcMQ: o runtime sgcWebSockets Core, o transporte TsgcTCPClient, a camada TLS e os utilitários de JSON. Um instalador, código-fonte completo na caixa.

TCP puro e TLS, e só isso

Todos os protocolos do pacote rodam sobre um socket bruto, aberto em texto puro ou envolvido em TLS. Isso cobre as portas nativas de broker listadas aqui, que é como MQTT, AMQP, Kafka e STOMP são normalmente implantados. Rodar um protocolo sobre WebSocket, por exemplo MQTT sobre WebSocket ou Web-STOMP, exige o cliente WebSocket, e esse acompanha o sgcWebSockets. Verifique qual transporte o seu broker expõe antes de escolher.

Delphi e C++ Builder

O sgcMQ tem como alvo do Delphi 7 ao RAD Studio 13 e o C++ Builder, nas seis plataformas. Não há build .NET deste pacote. Se você precisa de mensageria a partir do .NET, ela vive no sgcWebSockets.

O transporte cuida do encanamento

TLSOptions.IOHandler escolhe OpenSSL para builds multiplataforma ou SChannel no Windows, o WatchDog reconecta depois de uma queda de conexão, e a travessia de proxy HTTP CONNECT e o IPv6 não precisam de configuração extra. Configure uma vez e todos os protocolos acima herdam.

OpenSSL SChannel TLS mútuo Proxy HTTP Reconexão WatchDog

Cada componente e propriedade →

O sgcMQ implementa os protocolos publicados em vez de encapsular um SDK de fornecedor, então o broker é escolha sua: RabbitMQ, Apache Kafka, Eclipse Mosquitto, HiveMQ, EMQX, Apache ActiveMQ, Azure Service Bus e Event Hubs, ou AWS IoT Core. Trocar de broker é um host, uma porta e um conjunto de credenciais.

Nove Bibliotecas, Uma Caixa de Ferramentas

O sgcMQ é uma das nove bibliotecas de componentes da eSeGeCe para Delphi, C++ Builder e .NET. Elas compartilham convenções, vêm com código-fonte completo e são implantadas sem royalties.

sgcMQ

Componentes cliente de MQTT, AMQP 0.9.1 e 1.0, Apache Kafka e STOMP para Delphi e C++ Builder. Produto autônomo, com o runtime sgcWebSockets Core incluído.

Saiba mais →

sgcWebSockets

WebSocket, HTTP/2, MQTT, AMQP, WebRTC, IA e mais de 30 integrações de API para Delphi, C++ Builder, Lazarus e .NET. É onde vive o transporte WebSocket.

Saiba mais →

sgcHTML

Componentes HTML e de UI server-side sobre Bootstrap 5 e htmx. Coloque um dashboard ao vivo na frente das filas que o sgcMQ consome.

Saiba mais →

sgcQUIC

Transporte QUIC bruto e um cliente e servidor HTTP/3, com WebTransport. Um complemento do sgcWebSockets Enterprise.

Saiba mais →

sgcAI

Componentes de IA, LLM e MCP para Delphi e C++ Builder. Sete provedores de LLM por trás de um único componente, além de MCP, embeddings e fala. Produto autônomo, com o runtime sgcWebSockets Core incluído.

Saiba mais →

sgcOpenAPI

Analisador OpenAPI 3.x, gerador nativo de SDK Pascal, componente servidor OpenAPI e mais de 1.195 SDKs de nuvem pré-compilados.

Saiba mais →

sgcSign

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

Saiba mais →

sgcBiometrics

Windows Hello, sensores de impressão digital e o Windows Biometric Framework para Delphi e C++ Builder.

Saiba mais →

sgcIndy

Componentes Indy TCP/IP atualizados com TLS moderno, IPv6 e HTTP/2, do Delphi 7 ao 13.

Saiba mais →

Ver preços e licenças Baixar a versão de avaliação gratuita

O Que os Desenvolvedores Dizem

Confiado por desenvolvedores Delphi, C++ Builder, Lazarus e .NET ao redor do mundo.

A biblioteca sgcWebSockets de vocês é muito útil e fácil de configurar. Continuem com o ótimo trabalho!

Simone Moretti Desenvolvedor Delphi

O sgcWebSockets é incrível e o suporte de vocês é o melhor!

Christian Meyer Fundador & CTO

Muito obrigado pela ajuda e pelo suporte, eu adoro os componentes de vocês.

Mark Steinfeld CTO

Você está vendo a visão de Mensageria da eSeGeCe.

Mostre outro ângulo →

Fale com o Seu Broker a partir do Delphi

MQTT, AMQP, Kafka e STOMP em um único pacote, implementados nativamente, com o runtime sgcWebSockets Core incluído e código-fonte completo na caixa. Windows, Linux, macOS, iOS e Android a partir do mesmo código.