sgcMQ Todos os brokers, uma só portadora. Nenhuma DLL para distribuir.

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.

Um único pacote do sgcWebSockets. Ver preços →
  • MQTT 3.1.1 & 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 em uma única página da paleta
  • 5Famílias de protocolos, cada uma analisada em Object Pascal
  • 6Destinos: Win32, Win64, Linux64, macOS, iOS, Android
  • 0Bibliotecas externas: sem librdkafka, Paho, Qpid nem DLL
  • 1Portadora de transporte para todos os sete componentes
Um só estilo de API

Um componente por protocolo. O mesmo formato para os sete.

Solte o componente do protocolo em um formulário, atribua um TsgcTCPClient à sua propriedade Cliente , 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.

Um padrão para todo broker: um TsgcTCPClient ligado a um componente de protocolo pela propriedade Client, sobre TCP simples ou TLS

Um cliente TCP, mais um componente de protocolo

As entradas TsgcTCPClient é dono do socket, do host e da porta. O componente de protocolo se liga a ele pela propriedade Cliente e fala MQTT, AMQP, Kafka ou STOMP por cima. Passar de um listener simples para um criptografado é uma questão de número de porta e de TLS := True no transporte, e nada acima dele muda.

Conectando a um broker MQTT: o código Delphi ao lado da troca CONNECT e CONNACK

Conectado em poucas linhas

Aponte a portadora para o seu broker, ligue o TsgcWSPClient_MQTT, escolha a versão 5 ou 3.1.1 com uma única propriedade MQTTVersion e defina Active como True. Essa é a conexão inteira.

Qualidade de serviço 0, 1 e 2 do MQTT com a troca PUBLISH, PUBACK, PUBREC, PUBREL e PUBCOMP

Toda a mecânica de QoS, exposta como eventos

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 curingas e sessões retomáveis vêm junto.

Configurações de produção no cliente TCP: WatchDog, HeartBeat e TLS, com autenticação no componente de protocolo

As configurações de produção ficam na portadora

WatchDog reconecta após uma queda do link, o heartbeat o mantém vivo e o TLS o criptografa. Eles ficam no cliente TCP, então você os define uma única vez, qualquer que seja o protocolo por cima. A autenticação pertence ao próprio componente de protocolo.

Veja rodando

Publique e assine a partir do Delphi, em poucos minutos.

Um quickstart narrado e com legendas: um padrão para todo broker, uma conexão MQTT, tópicos e qualidade de serviço e, por fim, as configurações que importam em produção. Nada é baixado até você apertar o play.

Quickstart do sgcMQ

Conecte-se a um broker, assine um filtro de tópicos e publique, a partir do Delphi.

  1. Um padrão, todo brokerCrie um cliente TCP, que é dono do socket, do host e da porta, e depois ligue um componente de protocolo pela propriedade Client.
  2. Conecte-se a um broker MQTTAponte o cliente TCP para o broker, ligue o componente MQTT, escolha a versão 5 ou 3.1.1 e defina Active como True.
  3. Assinar e publicarSubscribe recebe um filtro de tópicos e um QoS. Publish recebe um tópico, o payload, o QoS e uma flag de retenção. As mensagens chegam em OnMQTTPublish.
  4. O mesmo padrão para os outros brokersAMQP 0.9.1 com exchanges, filas e canais, AMQP 1.0, STOMP com as variantes RabbitMQ e ActiveMQ e Kafka com grupos de consumidores e offsets.
  5. Pronto para produçãoWatchDog, heartbeat e TLS no cliente TCP, autenticação no componente de protocolo.
Sete componentes

Cinco famílias de protocolos, implementadas de forma nativa.

O sgcMQ implementa os protocolos publicados em vez de encapsular o SDK de um fornecedor, e toda licença inclui o código-fonte completo, então as implementações dos protocolos podem ser percorridas passo a passo no seu próprio depurador.

MQTT 3.1.1 & 5.0

TsgcWSPClient_MQTT cobre as duas versões do protocolo por trás de uma única propriedade MQTTVersion propriedade: QoS 0, 1 e 2, mensagens retidas, Last Will and Testament, assinaturas com curingas e sessões retomáveis. A versão 5 acrescenta códigos de motivo, propriedades de usuário, aliases de tópico, assinaturas compartilhadas e o ciclo de ida e volta do AUTH.

Ver o cliente MQTT →

AMQP 0.9.1

TsgcWSPClient_AMQP fala o protocolo para o qual o RabbitMQ foi criado: canais, declaração de exchanges e filas, bindings, consumidores, confirmações do publicador, QoS de prefetch e transações.

Ver o cliente AMQP 0.9.1 →

AMQP 1.0

TsgcWSPClient_AMQP1 fala o padrão OASIS por trás do Azure Service Bus e do Event Hubs: containers, sessões, links de remetente e de receptor, controle de fluxo baseado em crédito, SASL e os helpers de Claims-Based Security. Um formato de transmissão e um modelo de objetos diferentes, por isso tem o seu próprio componente.

Ver o cliente AMQP 1.0 →

Apache Kafka

TsgcWSPClient_Kafka fala o protocolo binário 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, o join, o sync, o heartbeat e o rebalance são tratados por você, ou leia uma partição por offset.

Ver o cliente Kafka →

STOMP 1.0 a 1.2

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 →

Seis destinos, sem asteriscos

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 →
O código

Quatro protocolos, o mesmo formato.

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;
  1. Crie o componente de protocoloUm componente por protocolo: MQTT, AMQP 0.9.1, AMQP 1.0, Kafka, STOMP, STOMP para RabbitMQ e STOMP para ActiveMQ.
  2. Atribua a portadoraDefina a sua propriedade Client como um TsgcTCPClient com o host e a porta do broker. TLS, proxy e reconexão são configurados ali, uma única vez.
  3. Ligue os eventosOs eventos de conexão, de mensagem e de confirmação chegam no componente, com as propriedades do próprio protocolo.
  4. Chame os verbosSubscribe e Publish, DeclareQueue e Consume, Produce e Poll, SubscribeQueue e PublishQueue: os nomes que o protocolo já usa.

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 →

Antes de comprar

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

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

Todo protocolo do pacote trafega sobre um socket bruto, aberto em texto simples ou envolvido em TLS, que é como MQTT, AMQP, Kafka e STOMP costumam ser implantados. Executar um protocolo sobre WebSocket, por exemplo MQTT sobre WebSocket ou Web-STOMP, exige o cliente WebSocket, que vem com 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.

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.

Parte do sgcWebSockets

Um único pacote do sgcWebSockets, com licença própria.

O sgcMQ inclui o runtime do sgcWebSockets Core no qual é construído, então nenhuma outra licença da eSeGeCe é necessária. Toda licença inclui o código-fonte completo e distribuição sem royalties nos seis destinos.

Single

1 licença de desenvolvedor. Uso em uma máquina por vez.

€249

Team

2 licenças de desenvolvedor. Uso em duas máquinas por vez.

€399

Site

Desenvolvedores ilimitados. Todas as máquinas da empresa.

€649

Componentes cliente de MQTT, AMQP 0.9.1 e 1.0, Apache Kafka e STOMP para Delphi e C++ Builder, com o runtime do sgcWebSockets Core incluído. Precisa também de transportes WebSocket ou de .NET? Eles vêm com o sgcWebSockets.

Ver preços e licenças
DEPOIMENTOS

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

Converse 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.

Mais da eSeGeCe

Outros Produtos da eSeGeCe

O sgcMQ compartilha convenções com as demais bibliotecas de componentes da eSeGeCe para Delphi, C++ Builder e .NET. Elas incluem o código-fonte completo e são distribuídas sem royalties.

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.

sgcAuth

Cliente OAuth2, cliente JWT e suporte a WebAuthn para Delphi e C++ Builder. Independente, com o runtime sgcWebSockets Core embutido.

sgcHTTP

Servidor HTTP, cliente HTTP/2, cliente gRPC e clientes Google Cloud Pub/Sub, Calendar e FCM para Delphi e C++ Builder. Produto autônomo, com o runtime sgcWebSockets Core incluído.

sgcREST

Servidor REST, servidor OpenAPI e componentes cliente OpenAPI para Delphi e C++ Builder. Produto autônomo, com o runtime sgcWebSockets Core incluído.

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.

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.

sgcQUIC

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

sgcOpenAPI

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

sgcSign

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

sgcPDF

Crie, edite, visualize, assine, censure e valide arquivos PDF em Object Pascal puro, sem DLL para implantar. Licenciado separadamente.

sgcBiometrics

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

sgcIndy

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

Últimas do blog

Ver todas as publicações →

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

Mostre outro ângulo →
Garantia de reembolso de 30 diasNão ficou satisfeito? Solicite o reembolso total em até 30 dias após a compra. Ver política de reembolso