sgcMQ: clientes MQTT, AMQP, Kafka e STOMP para Delphi e C++ Builder
Produto autônomo Windows, Linux, macOS, iOS e Android

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

Sete componentes cliente falam MQTT 3.1.1 e 5.0, AMQP 0.9.1, AMQP 1.0, o protocolo de rede do Apache Kafka e STOMP 1.0 até 1.2, com clientes STOMP específicos para RabbitMQ e ActiveMQ. Cada formato de rede é interpretado e escrito em Object Pascal dentro da biblioteca, então não há biblioteca cliente externa, nem DLL, nem wrapper para distribuir. O sgcMQ é autônomo: ele já traz embutido o runtime sgcWebSockets Core sobre o qual é construído, então não há licença base para comprar.

Nenhuma licença base necessária
Código-fonte completo
Seis destinos, uma base de código
Um transporte TsgcTCPClient TCP puro ou TLS, o mesmo socket para todos os 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 Uma página na paleta de componentes
5 Famílias de protocolos MQTT, AMQP 0.9.1, AMQP 1.0, Kafka, STOMP
6 Plataformas de destino Win32, Win64, Linux64, macOS, iOS, Android
0 Bibliotecas externas Sem librdkafka, sem Paho, sem Qpid, sem DLL
1 Transporte Um único TsgcTCPClient atende a todos

Duas coisas que vale saber antes

O que o sgcMQ exige de você e como os bytes chegam ao broker. As duas respostas são curtas.

★ Nenhuma licença base necessária

O sgcMQ é autossuficiente

Ele não se apoia em um produto base. Tudo o que os componentes precisam vem embutido no sgcMQ: o runtime sgcWebSockets Core, o transporte TCP TsgcTCPClient, a camada TLS e os utilitários de JSON. Um SKU, um instalador, nada mais para comprar.

O código-fonte completo acompanha todas as licenças, então as implementações dos protocolos podem ser depuradas passo a passo no seu próprio depurador, em vez de sumirem dentro de um binário.

Escopo de transporte

O sgcMQ é TCP puro e TLS

Todo protocolo do pacote trafega sobre um socket bruto, aberto puro ou envolvido em TLS. Isso cobre as portas nativas do broker, que é como MQTT, AMQP, Kafka e STOMP normalmente são implantados, e não precisa de nada além do que já vem na caixa.

Rodar um protocolo sobre WebSocket, por exemplo MQTT sobre WebSocket ou Web-STOMP, exige o cliente WebSocket, e ele vem com o sgcWebSockets, não com o sgcMQ. Verifique qual transporte o seu broker expõe antes de escolher.

Sete clientes, cinco famílias de protocolos

Cada um é um componente não visual que você solta em um formulário ou cria em código. Você conecta o transporte pela propriedade Client, liga os eventos do protocolo e depois chama os verbos do próprio protocolo. A nomenclatura é consistente nos sete, então aprender um já leva você quase até o fim dos demais.

MQTT1 componente

Publicar, assinar e toda a mecânica de QoS

TsgcWSPClient_MQTT cobre MQTT 3.1.1 e MQTT 5.0 atrás de uma única propriedade MQTTVersion. QoS 0, 1 e 2, com a troca de 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 acrescenta códigos de motivo, propriedades de usuário, aliases de tópico, assinaturas compartilhadas e o ciclo AUTH para esquemas de desafio e resposta.

TsgcWSPClient_MQTT MQTT 3.1.1 · MQTT 5.0
AMQP2 componentes

Dois protocolos que compartilham o nome e nada mais

TsgcWSPClient_AMQP fala AMQP 0.9.1, o protocolo para o qual o RabbitMQ foi construído: canais, declaração de exchanges e filas, vínculos, consumidores, confirmações do publicador, QoS de prefetch e transações. TsgcWSPClient_AMQP1 fala AMQP 1.0, o padrão OASIS e ISO/IEC 19464 por trás do Azure Service Bus e do Event Hubs: containers, sessões, links de envio e recebimento, controle de fluxo por crédito, SASL e os utilitários de token do Claims-Based Security. Formato de rede diferente, modelo de objetos diferente, então o sgcMQ entrega um componente para cada um em vez de fingir que uma única API serve para os dois.

Apache Kafka1 componente

O protocolo binário, falado diretamente

TsgcWSPClient_Kafka fala o protocolo de rede do Kafka sobre TCP, incluindo o formato de lote de registros v2. Não há proxy REST na frente nem librdkafka por baixo. Produza registros isolados ou lotes com um nível de acks escolhido e compressão gzip, consuma por um grupo em que a descoberta do coordenador, a entrada, a sincronização, o heartbeat e o rebalanceamento são tratados para você, ou leia uma partição diretamente por offset. Commit de offset, criação e exclusão de tópicos, listagem de grupos e a sondagem de recursos do broker são todas chamadas de primeira classe.

TsgcWSPClient_Kafka Produtor · Grupos de consumidores · Administração
STOMP3 componentes

Um cliente genérico, dois dialetos de broker

TsgcWSPClient_STOMP trata STOMP 1.0, 1.1 e 1.2: SEND, SUBSCRIBE, UNSUBSCRIBE, ACK, NACK, recibos, heartbeat bidirecional e os frames de transação BEGIN, COMMIT e ABORT, com as versões aceitas anunciadas por Versions. Os dois descendentes transformam as convenções de destino dos brokers em métodos nomeados: o RabbitMQ ganha utilitários /queue, /topic, /exchange, /amq/queue e /temp-queue, e o ActiveMQ ganha utilitários de fila e tópico mais uma propriedade ActiveMQ_Options para os cabeçalhos próprios do broker.

Protocolos publicados, então o broker é escolha sua

O sgcMQ implementa as especificações em vez de encapsular o SDK de um fornecedor, então qualquer coisa que fale esses protocolos na rede é candidata. O mesmo componente funciona contra um broker auto-hospedado e um serviço gerenciado na nuvem sem mudança de código, e trocar de broker é uma questão de host, porta e um conjunto de credenciais.

RabbitMQ TsgcWSPClient_AMQP

AMQP 0.9.1 de forma nativa. Os plugins STOMP e MQTT também são acessíveis, cada um com o seu próprio componente.

Apache Kafka TsgcWSPClient_Kafka

O protocolo binário do próprio broker na porta 9092, e qualquer broker compatível com o protocolo de rede do Kafka.

Eclipse Mosquitto TsgcWSPClient_MQTT

O broker MQTT leve de referência, puro na 1883 ou com TLS na 8883.

HiveMQ TsgcWSPClient_MQTT

MQTT 5.0 completo, incluindo assinaturas compartilhadas e propriedades de usuário.

EMQX TsgcWSPClient_MQTT

MQTT 3.1.1 e 5.0, auto-hospedado ou na nuvem do fornecedor.

Apache ActiveMQ TsgcWSPClient_STOMP_ActiveMQ

STOMP na 61613, ou AMQP 1.0 contra o Artemis com o componente AMQP 1.0.

Azure Service Bus TsgcWSPClient_AMQP1

AMQP 1.0 com os utilitários de Claims-Based Security, e o Event Hubs no mesmo componente.

AWS IoT Core TsgcWSPClient_MQTT

MQTT sobre TLS com certificados de cliente, configurado pelas TLSOptions do transporte.

Um transporte sob todos os protocolos

Atribua um TsgcTCPClient à propriedade Client do componente de protocolo e os frames vão direto para o socket. Criptografia, travessia de proxy, IPv6 e reconexão são configurações desse transporte, então são definidas uma única vez e se comportam de forma idêntica, esteja acima delas o MQTT, o AMQP, o Kafka ou o STOMP.

MQTT 3.1.1 e 5.0 TsgcWSPClient_MQTT
TCP1883O listener MQTT padrão.
TLS8883Ative TLS no transporte.
AMQP 0.9.1 TsgcWSPClient_AMQP
TCP5672O listener padrão do RabbitMQ.
TLS5671O listener amqps.
AMQP 1.0 TsgcWSPClient_AMQP1
TCP5672O mesmo número de porta, protocolo diferente.
TLS5671O que o Azure Service Bus espera.
Apache Kafka TsgcWSPClient_Kafka
TCP9092O listener em texto puro.
TLS9093O que estiver configurado como listener SSL do próprio broker.
STOMP, plugin do RabbitMQ TsgcWSPClient_STOMP_RabbitMQ
TCP61613A porta STOMP nativa.
TLS61614O listener criptografado do plugin.
STOMP, ActiveMQ TsgcWSPClient_STOMP_ActiveMQ
TCP61613O conector STOMP nativo.
TLS61612O conector stomp+ssl do broker.

O TsgcWSPClient_STOMP genérico também usa a 61613, contra qualquer broker compatível com STOMP. Esses são os padrões convencionais, e a propriedade Port do transporte aceita a porta que a sua implantação realmente escuta.

TLS do jeito que você prefere

TLSOptions.IOHandler escolhe OpenSSL para builds multiplataforma, ou SChannel no Windows quando você preferir não distribuir nenhum binário do OpenSSL. O TLS mútuo lê um certificado de cliente a partir de um arquivo PEM, de um pacote PKCS#12 ou do repositório de certificados do Windows.

Reconexão e keep-alive

O WatchDog do transporte reconecta depois de uma queda do link, com intervalo e número de tentativas configuráveis, e cada protocolo acrescenta a própria verificação de vitalidade: pings de keep-alive do MQTT, heartbeats do AMQP, heartbeat do STOMP e heartbeats do grupo de consumidores do Kafka.

Proxies e IPv6

O suporte a proxy HTTP CONNECT está no transporte, então um broker atrás de um proxy corporativo fica acessível, e um endereço de broker IPv6 não precisa de configuração extra.

Eventos, não um laço de polling

A leitura roda na própria thread e os frames de entrada chegam como eventos tipados: OnMQTTPublish, OnAMQPBasicDeliver, OnKafkaMessage, OnSTOMPMessage. Ajuste as configurações de notificação do transporte para levá-los à thread principal em código VCL e FMX.

Assine e publique por MQTT

Combine um TsgcTCPClient com o componente de protocolo, defina as credenciais, ligue os eventos e depois chame os verbos do protocolo. O mesmo formato em Object Pascal e C++ Builder, e o mesmo formato para os outros 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 destinos, sem asterisco

O pacote de mensageria não tem nenhuma restrição de plataforma. Todos os sete clientes e o transporte por baixo deles são registrados para cada destino que o compilador produz, de um serviço Windows a um aparelho Android, a partir de uma única árvore de código-fonte.

Todos os 7 clientes de protocolo MQTT, AMQP 0.9.1, AMQP 1.0, Kafka e os três clientes STOMP
Windows Win32 Windows Win64 Linux64 macOS iOS Android
O transporte TsgcTCPClient Socket, TLS, proxy, IPv6 e reconexão pelo WatchDog
Windows Win32 Windows Win64 Linux64 macOS iOS Android
Mecanismo de TLS Escolhido com TLSOptions.IOHandler
OpenSSL, todos os destinos SChannel, somente Windows
Suporte a IDE Uma única árvore de código-fonte, com pacotes de tempo de projeto por versão
Delphi 7 a 13 C++ Builder
Transporte WebSocket MQTT sobre WebSocket, Web-STOMP e similares
Não está no sgcMQ Precisa de um pacote sgcWebSockets

Veja a tabela completa de padrões e plataformas na página de recursos →

Um pacote autônomo

O sgcMQ é licenciado por conta própria, a partir de €249 para um único desenvolvedor. Todas as licenças incluem código-fonte completo, 1 ano de atualizações e de 50% a 70% de desconto na renovação: 50% ao renovar um pacote, 60% para dois, 70% para três ou mais. sgcAI e sgcMQ contam cada um como um pacote.

sgcMQ

€249

Licenças Single, Team e Site disponíveis.

  • Cliente MQTT 3.1.1 e 5.0
  • Clientes AMQP 0.9.1 e AMQP 1.0
  • Cliente Apache Kafka
  • Clientes STOMP, RabbitMQ e ActiveMQ
  • Runtime sgcWebSockets Core incluído
  • Delphi e C++ Builder, todos os seis destinos
  • Código-fonte completo
  • 1 ano de atualizações
★ Nenhuma licença base necessária

O sgcMQ inclui o runtime sgcWebSockets Core, então não há mais nada para comprar.

O checkout lista dois itens: o direito de uso do runtime sgcWebSockets Core, cobrado a zero, e o próprio pacote sgcMQ. Detalhes completos de preços.

3,000+Developers
20+Years
761+Components
30+API Integrations
5Platforms
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

Converse com o seu broker a partir do Delphi

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

Outros produtos da eSeGeCe

Combine o sgcMQ com as nossas outras bibliotecas de componentes para Delphi, C++ Builder e .NET.

sgcWebSockets

A biblioteca completa: clientes e servidores WebSocket, HTTP/2, IoT, P2P e componentes de IA. É aqui que mora o transporte WebSocket.

Saiba mais →

sgcQUIC

Componentes cliente e servidor QUIC (RFC 9000) e HTTP/3 (RFC 9114) construídos sobre o mecanismo QUIC nativo do OpenSSL 3.5.

Saiba mais →

sgcAI

Componentes de IA, LLM e MCP. Um único componente de chat alcança OpenAI, Anthropic, Gemini, DeepSeek, Ollama, Grok e Mistral.

Saiba mais →

sgcHTML

Componentes de HTML e interface do lado do servidor, com reconhecimento de dados, para Delphi, C++ Builder e .NET, com Bootstrap 5 e htmx.

Saiba mais →

sgcSign

Assinaturas digitais de nível empresarial. XAdES, PAdES, CAdES e ASiC com 10 provedores de chaves e 21 perfis por país da UE.

Saiba mais →

sgcOpenAPI

Parser e gerador de SDK para OpenAPI 3.0. Transforme qualquer especificação OpenAPI em um cliente Delphi fortemente tipado em segundos.

Saiba mais →