eSeGeCe — komponenty komunikacyjne klasy enterprise dla Delphi i .NET
WYRÓŻNIONE · sgcMQ

Każdy broker, jeden nośnik

Siedem komponentów klienckich mówi w MQTT 3.1.1 i 5.0, AMQP 0.9.1, AMQP 1.0, binarnym protokole sieciowym Apache Kafka oraz STOMP od 1.0 do 1.2, z dialektami brokerów dla RabbitMQ i ActiveMQ. Każda ramka jest parsowana i zapisywana w Object Pascalu wewnątrz biblioteki, więc nie ma librdkafka, nie ma Paho, nie ma Qpid ani żadnej DLL do dostarczania. Cała siódemka jedzie na jednym TsgcTCPClient, otwartym zwyczajnie albo owiniętym w TLS.

  • 7 komponentów klienckich
  • 5 rodzin protokołów
  • Windows · Linux · macOS · iOS · Android
  • Delphi od 7 do 13 · C++ Builder

Pięć rodzin protokołów, siedem komponentów

sgcMQ to pakiet samodzielny. Zawiera środowisko uruchomieniowe sgcWebSockets Core, na którym jest zbudowany, a każda licencja jest dostarczana z pełnym kodem źródłowym, więc implementacje protokołów prześledzisz krok po kroku we własnym debugerze.

7 Komponentów klienckich MQTT, AMQP 0.9.1, AMQP 1.0, Kafka, STOMP, STOMP RabbitMQ i STOMP ActiveMQ, na jednej stronie palety.
5 Rodzin protokołów Każdy format sieciowy parsowany i zapisywany w Object Pascalu, wewnątrz biblioteki.
6 Platform docelowych Win32, Win64, Linux64, macOS, iOS i Android, z jednego drzewa źródeł.
0 Bibliotek zewnętrznych Bez librdkafka, bez Paho, bez Qpid, bez DLL i bez proxy REST z przodu.
1 Nośnik transportowy Jeden TsgcTCPClient niesie całą siódemkę, więc TLS, proxy i ponowne łączenie konfigurujesz raz.
sgcMQ

Klienci kolejek komunikatów i streamingu dla Delphi i C++ Builder. Pakiet samodzielny z dołączonym środowiskiem uruchomieniowym sgcWebSockets Core, pełnym kodem źródłowym i wdrożeniem bez opłat licencyjnych na wszystkich sześciu platformach docelowych.

Jeden komponent na protokół, jeden styl API

Upuść komponent protokołu na formularz, przypisz TsgcTCPClient do jego właściwości Client, podepnij zdarzenia, a potem wywołuj własne polecenia protokołu. Nazewnictwo jest spójne we wszystkich siedmiu, więc opanowanie jednego prowadzi cię niemal przez całą resztę.

MQTT 3.1.1 i 5.0

Publikacja, subskrypcja i cała maszyneria QoS

TsgcWSPClient_MQTT obejmuje obie wersje protokołu za jedną właściwością MQTTVersion. QoS 0, 1 i 2 z wymianą PUBACK, PUBREC, PUBREL i PUBCOMP udostępnioną jako zdarzenia, a nie ukrytą, wiadomości zachowane, Last Will and Testament, subskrypcje wieloznaczne i wznawialne sesje. Wersja 5 dodaje kody przyczyn, właściwości użytkownika, aliasy tematów, subskrypcje współdzielone i rundę AUTH.

Zobacz klienta MQTT →
AMQP 0.9.1 i 1.0

Dwa protokoły, które dzielą nazwę

TsgcWSPClient_AMQP mówi w AMQP 0.9.1, protokole, dla którego zbudowano RabbitMQ: kanały, deklarowanie wymian i kolejek, powiązania, konsumenci, potwierdzenia wydawcy, QoS prefetch i transakcje. TsgcWSPClient_AMQP1 mówi w AMQP 1.0, standardzie OASIS stojącym za Azure Service Bus i Event Hubs: kontenery, sesje, łącza nadawcy i odbiorcy, kontrola przepływu oparta na kredytach, SASL i funkcje pomocnicze Claims-Based Security. Inny format sieciowy, inny model obiektów, więc każdy ma osobny komponent.

AMQP 0.9.1 → AMQP 1.0 →
Apache Kafka

Protokół binarny, wprost

TsgcWSPClient_Kafka mówi protokołem sieciowym Kafka przez TCP, łącznie z formatem batchy rekordów v2. Produkuj z wybranym poziomem acks i kompresją gzip, konsumuj przez grupę, w której odkrywanie koordynatora, join, sync, heartbeat i rebalans są obsługiwane za ciebie, albo czytaj partycję według offsetu.

Zobacz klienta Kafka →
STOMP od 1.0 do 1.2

Jeden klient ogólny, dwa dialekty brokerów

TsgcWSPClient_STOMP obsługuje SEND, SUBSCRIBE, UNSUBSCRIBE, ACK, NACK, potwierdzenia odbioru, dwukierunkowy heart-beating oraz ramki transakcji BEGIN, COMMIT i ABORT. Dwie klasy potomne zamieniają konwencje miejsc docelowych brokerów na nazwane metody, jedna dla RabbitMQ i jedna dla ActiveMQ.

Zobacz klientów STOMP →
Wieloplatformowy

Sześć platform, bez gwiazdki

Cała siódemka klientów i nośnik pod nimi są zarejestrowane dla Win32, Win64, Linux64, macOS, iOS i Android, od Delphi 7 po RAD Studio 13, także w C++ Builder. Pakiet nie ma żadnych ograniczeń platformowych.

Matryca funkcji →

Strony referencyjne każdego komponentu:

Cztery protokoły, ten sam kształt

Utwórz komponent protokołu, przypisz nośnik, podepnij zdarzenia, wywołaj polecenia. Przejście ze zwykłego portu nasłuchu na szyfrowany to numer portu i TLS := True na nośniku, a nic powyżej się nie zmienia.

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;

Ten sam kształt w Object Pascalu i w C++ Builder, i ten sam kształt dla pozostałych trzech komponentów. Pełna matryca funkcji →

Dwie rzeczy, które warto wiedzieć najpierw

Czego sgcMQ od ciebie wymaga i jak bajty docierają do brokera. Obie odpowiedzi są krótkie i obie znajdziesz na tej stronie, a nie drobnym drukiem.

Natywne porty nasłuchu brokerów
protokół            komponent                       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

* cokolwiek jest ustawione jako własny szyfrowany port nasłuchu
  brokera. To są zwyczajowe wartości domyślne. Port nośnika
  przyjmuje to, na czym twoje wdrożenie faktycznie nasłuchuje.

sgcMQ jest samodzielny

Wszystko, czego potrzebują komponenty, jest zawarte w sgcMQ: środowisko uruchomieniowe sgcWebSockets Core, nośnik TsgcTCPClient, warstwa TLS i funkcje pomocnicze JSON. Jeden instalator, pełny kod źródłowy w zestawie.

Zwykły TCP i TLS, i tylko to

Każdy protokół w pakiecie działa na surowym gnieździe, otwartym zwyczajnie albo owiniętym w TLS. Obejmuje to wymienione tutaj natywne porty brokerów, czyli sposób, w jaki MQTT, AMQP, Kafka i STOMP są zwykle wdrażane. Uruchomienie protokołu przez WebSocket, na przykład MQTT przez WebSocket albo Web-STOMP, wymaga klienta WebSocket, a ten jest dostarczany z sgcWebSockets. Sprawdź, jaki transport udostępnia twój broker, zanim dokonasz wyboru.

Delphi i C++ Builder

sgcMQ jest przeznaczony dla Delphi od 7 po RAD Studio 13 i C++ Builder, na wszystkich sześciu platformach. Ten pakiet nie ma wydania .NET. Jeśli potrzebujesz komunikatów z .NET, znajdziesz je w sgcWebSockets.

Nośnik zapewnia całą infrastrukturę

TLSOptions.IOHandler wybiera OpenSSL dla kompilacji wieloplatformowych albo SChannel na Windows, WatchDog łączy ponownie po zerwanym łączu, a przechodzenie przez proxy HTTP CONNECT i IPv6 nie wymagają dodatkowej konfiguracji. Ustaw go raz, a każdy protokół powyżej go odziedziczy.

OpenSSL SChannel Wzajemne TLS Proxy HTTP Ponowne łączenie WatchDog

Każdy komponent i właściwość →

sgcMQ implementuje opublikowane protokoły, zamiast opakowywać SDK producenta, więc wybór brokera należy do ciebie: RabbitMQ, Apache Kafka, Eclipse Mosquitto, HiveMQ, EMQX, Apache ActiveMQ, Azure Service Bus i Event Hubs albo AWS IoT Core. Zmiana brokera to host, port i zestaw poświadczeń.

Dziewięć bibliotek, jedna skrzynka narzędziowa

sgcMQ to jedna z dziewięciu bibliotek komponentów eSeGeCe dla Delphi, C++ Builder i .NET. Dzielą te same konwencje, dostarczane są z pełnym kodem źródłowym i wdrażane bez opłat licencyjnych.

sgcMQ

Komponenty klienckie MQTT, AMQP 0.9.1 i 1.0, Apache Kafka oraz STOMP dla Delphi i C++ Builder. Produkt samodzielny, z dołączonym środowiskiem uruchomieniowym sgcWebSockets Core.

Dowiedz się więcej →

sgcWebSockets

WebSocket, HTTP/2, MQTT, AMQP, WebRTC, AI oraz ponad 30 integracji API dla Delphi, C++ Builder, Lazarus i .NET. To tutaj mieszka nośnik WebSocket.

Dowiedz się więcej →

sgcHTML

Komponenty HTML i UI po stronie serwera na Bootstrap 5 i htmx. Postaw pulpit na żywo przed kolejkami, które konsumuje sgcMQ.

Dowiedz się więcej →

sgcQUIC

Surowy transport QUIC oraz klient i serwer HTTP/3, z WebTransport. Dodatek do sgcWebSockets Enterprise.

Dowiedz się więcej →

sgcAI

Komponenty AI, LLM i MCP dla Delphi oraz C++ Builder. Siedmiu dostawców LLM za jednym komponentem, a do tego MCP, embeddingi i mowa. Produkt samodzielny, z dołączonym środowiskiem uruchomieniowym sgcWebSockets Core.

Dowiedz się więcej →

sgcOpenAPI

Parser OpenAPI 3.x, natywny generator SDK w Pascalu, komponent serwera OpenAPI oraz ponad 1 195 gotowych SDK chmurowych.

Dowiedz się więcej →

sgcSign

XAdES, PAdES, CAdES i ASiC dla dokumentów, Authenticode, ClickOnce, NuGet i VSIX dla kodu.

Dowiedz się więcej →

sgcBiometrics

Windows Hello, czytniki linii papilarnych i Windows Biometric Framework dla Delphi i C++ Builder.

Dowiedz się więcej →

sgcIndy

Zaktualizowane komponenty Indy TCP/IP z nowoczesnym TLS, IPv6 i HTTP/2 od Delphi 7 do 13.

Dowiedz się więcej →

Zobacz cennik i licencje Pobierz bezpłatną wersję próbną

Co mówią programiści

Zaufali nam programiści Delphi, C++ Builder, Lazarus i .NET na całym świecie.

Wasza biblioteka sgcWebSockets jest bardzo przydatna i łatwa w konfiguracji. Tak trzymać!

Simone Moretti Programista Delphi

sgcWebSockets jest niesamowity, a wasze wsparcie jest najlepsze!

Christian Meyer Założyciel i CTO

Bardzo dziękuję za pomoc i wsparcie, uwielbiam wasze komponenty.

Mark Steinfeld CTO

Oglądasz widok Komunikaty eSeGeCe.

Pokaż mi inne ujęcie →

Rozmawiaj ze swoim brokerem z poziomu Delphi

MQTT, AMQP, Kafka i STOMP w jednym pakiecie, zaimplementowane natywnie, z dołączonym środowiskiem uruchomieniowym sgcWebSockets Core i pełnym kodem źródłowym w zestawie. Windows, Linux, macOS, iOS i Android z tego samego kodu.