sgcMQ Każdy broker, jeden nośnik. Bez DLL do dołączania.

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.

Pojedynczy pakiet sgcWebSockets. Zobacz ceny →
  • MQTT 3.1.1 i 5.0
  • AMQP 0.9.1
  • AMQP 1.0
  • Apache Kafka
  • STOMP od 1.0 do 1.2
  • Delphi 7 do 13
  • C++ Builder
  • 7Komponentów klienckich na jednej stronie palety
  • 5Rodzin protokołów, każda parsowana w Object Pascalu
  • 6Platformy docelowe: Win32, Win64, Linux64, macOS, iOS, Android
  • 0Zewnętrzne biblioteki: bez librdkafka, Paho, Qpid ani DLL
  • 1Nośnik transportowy dla wszystkich siedmiu komponentów
Jeden styl API

Jeden komponent na protokół. Ten sam kształt dla wszystkich siedmiu.

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

Jeden wzorzec dla każdego brokera: TsgcTCPClient podłączony do komponentu protokołu przez właściwość Client, przez zwykłe TCP lub TLS

Klient TCP plus komponent protokołu

Komponent TsgcTCPClient zarządza gniazdem, hostem i portem. Komponent protokołu podłącza się przez jego właściwość Client i mówi nad nim protokołami MQTT, AMQP, Kafka lub STOMP. 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.

Łączenie z brokerem MQTT: kod w Delphi obok wymiany CONNECT i CONNACK

Połączenie w kilku linijkach

Wskaż nośnikowi swojego brokera, podłącz TsgcWSPClient_MQTT, wybierz wersję 5 lub 3.1.1 jedną właściwością MQTTVersion i ustaw Active na True. To całe połączenie.

Jakość usługi MQTT 0, 1 i 2 z wymianą PUBLISH, PUBACK, PUBREC, PUBREL i PUBCOMP

Cała maszyneria QoS, udostępniona jako zdarzenia

QoS 0, 1 i 2, z wymianą PUBACK, PUBREC, PUBREL i PUBCOMP udostępnioną jako zdarzenia, a nie ukrytą. Do tego wiadomości retained, Last Will and Testament, subskrypcje z symbolami wieloznacznymi i wznawialne sesje.

Ustawienia produkcyjne klienta TCP: WatchDog, HeartBeat i TLS, a uwierzytelnianie w komponencie protokołu

Ustawienia produkcyjne żyją na nośniku

WatchDog ponownie łączy po zerwaniu łącza, heartbeat utrzymuje je przy życiu, a TLS je szyfruje. Siedzą w kliencie TCP, więc ustawiasz je raz, niezależnie od tego, jaki protokół działa wyżej. Uwierzytelnianie należy do samego komponentu protokołu.

Zobacz, jak działa

Publikuj i subskrybuj z Delphi w kilka minut.

Quickstart z narracją i napisami: jeden wzorzec dla każdego brokera, połączenie MQTT, tematy i jakość usługi, a potem ustawienia ważne w produkcji. Nic nie jest pobierane, dopóki nie naciśniesz odtwarzania.

Szybki start sgcMQ

Połącz się z brokerem, zasubskrybuj filtr tematów i publikuj, z poziomu Delphi.

  1. Jeden wzorzec, każdy brokerUtwórz klienta TCP, który zarządza gniazdem, hostem i portem, a potem podłącz komponent protokołu przez właściwość Client.
  2. Połącz się z brokerem MQTTWskaż klientowi TCP brokera, podłącz komponent MQTT, wybierz wersję 5 lub 3.1.1 i ustaw Active na True.
  3. Subskrybuj i publikujSubscribe przyjmuje filtr tematów i QoS. Publish przyjmuje temat, ładunek, QoS i flagę retain. Wiadomości przychodzą w OnMQTTPublish.
  4. Ten sam wzorzec dla pozostałych brokerówAMQP 0.9.1 z exchange, kolejkami i kanałami, AMQP 1.0, STOMP z wariantami dla RabbitMQ i ActiveMQ oraz Kafka z grupami konsumentów i offsetami.
  5. Gotowe na produkcjęWatchDog, heartbeat i TLS w kliencie TCP, uwierzytelnianie w komponencie protokołu.
Siedem komponentów

Pięć rodzin protokołów, zaimplementowanych natywnie.

sgcMQ implementuje opublikowane protokoły zamiast opakowywać SDK dostawcy, a każda licencja zawiera pełny kod źródłowy, więc implementacje protokołów prześledzisz krok po kroku we własnym debugerze.

MQTT 3.1.1 i 5.0

TsgcWSPClient_MQTT obejmuje obie wersje protokołu za jedną właściwością MQTTVersion: QoS 0, 1 i 2, wiadomości retained, Last Will and Testament, subskrypcje z symbolami wieloznacznymi 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

TsgcWSPClient_AMQP mówi protokołem, dla którego zbudowano RabbitMQ: kanały, deklaracje exchange i kolejek, powiązania, konsumenci, potwierdzenia wydawcy, prefetch QoS i transakcje.

Zobacz klienta AMQP 0.9.1 →

AMQP 1.0

TsgcWSPClient_AMQP1 mówi standardem OASIS stojącym za Azure Service Bus i Event Hubs: kontenery, sesje, łącza nadawcy i odbiorcy, sterowanie przepływem oparte na kredytach, SASL i pomocniki Claims-Based Security. Inny format na przewodzie i inny model obiektów, więc ma własny komponent.

Zobacz klienta AMQP 1.0 →

Apache Kafka

TsgcWSPClient_Kafka mówi binarnym protokołem Kafka przez TCP, w tym formatem partii rekordów v2. Produkuj z wybranym poziomem acks i kompresją gzip, konsumuj przez grupę, w której wykrywanie koordynatora, join, sync, heartbeat i rebalance są obsługiwane za ciebie, albo czytaj partycję po offsecie.

Zobacz klienta Kafka →

STOMP od 1.0 do 1.2

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 →

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

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;
  1. Utwórz komponent protokołuJeden komponent na protokół: MQTT, AMQP 0.9.1, AMQP 1.0, Kafka, STOMP, STOMP dla RabbitMQ i STOMP dla ActiveMQ.
  2. Przypisz nośnikUstaw jego właściwość Client na TsgcTCPClient z hostem i portem brokera. TLS, proxy i ponowne łączenie konfigurujesz tam, raz.
  3. Podepnij zdarzeniaZdarzenia połączenia, wiadomości i potwierdzeń przychodzą w komponencie, razem z właściwościami samego protokołu.
  4. Wywołaj poleceniaSubscribe i Publish, DeclareQueue i Consume, Produce i Poll, SubscribeQueue i PublishQueue: nazwy, których używa już sam protokół.

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 →

Zanim kupisz

Dwie rzeczy, które warto wiedzieć wcześniej.

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

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 zwykłym lub opakowanym w TLS, tak jak zwykle wdraża się MQTT, AMQP, Kafka i STOMP. Uruchomienie protokołu przez WebSocket, na przykład MQTT przez WebSocket lub Web-STOMP, wymaga klienta WebSocket, który 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.

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

Część sgcWebSockets

Pojedynczy pakiet sgcWebSockets, licencjonowany osobno.

sgcMQ zawiera środowisko uruchomieniowe sgcWebSockets Core, na którym jest zbudowany, więc nie potrzeba żadnej innej licencji eSeGeCe. Każda licencja obejmuje pełny kod źródłowy i wdrożenie bez opłat licencyjnych na wszystkich sześciu platformach docelowych.

Single

Licencja dla 1 programisty. Użycie na jednej maszynie naraz.

€249

Team

Licencje dla 2 programistów. Użycie na dwóch maszynach naraz.

€399

Site

Nieograniczona liczba programistów. Wszystkie maszyny firmy.

€649

Komponenty klienckie MQTT, AMQP 0.9.1 i 1.0, Apache Kafka oraz STOMP dla Delphi i C++ Buildera, z dołączonym środowiskiem uruchomieniowym sgcWebSockets Core. Potrzebujesz też transportów WebSocket lub .NET? Są dostarczane z sgcWebSockets.

Zobacz cennik i licencje
REFERENCJE

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

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

Więcej od eSeGeCe

Inne produkty eSeGeCe

sgcMQ dzieli konwencje z pozostałymi bibliotekami komponentów eSeGeCe dla Delphi, C++ Buildera i .NET. Są dostarczane z pełnym kodem źródłowym i wdrażane bez opłat licencyjnych.

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.

sgcAuth

Klient OAuth2, klient JWT i obsługa WebAuthn dla Delphi i C++ Builder. Produkt samodzielny, z dołączonym środowiskiem uruchomieniowym sgcWebSockets Core.

sgcHTTP

Serwer HTTP, klient HTTP/2, klient gRPC oraz klienty Google Cloud Pub/Sub, Calendar i FCM dla Delphi i C++ Builder. Produkt samodzielny, z dołączonym środowiskiem uruchomieniowym sgcWebSockets Core.

sgcREST

Komponenty serwera REST, serwera OpenAPI i klienta OpenAPI dla Delphi i C++ Buildera. Samodzielne, z dołączonym środowiskiem uruchomieniowym sgcWebSockets Core.

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.

sgcHTML

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

sgcQUIC

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

sgcOpenAPI

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

sgcSign

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

sgcPDF

Twórz, edytuj, przeglądaj, podpisuj, cenzuruj i weryfikuj pliki PDF w czystym Object Pascalu, bez DLL do wdrożenia. Licencjonowany osobno.

sgcBiometrics

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

sgcIndy

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

Najnowsze wpisy na blogu

Zobacz wszystkie wpisy →

Oglądasz widok sgcMQ eSeGeCe.

Pokaż mi inne ujęcie →
30-dniowa gwarancja zwrotu pieniędzyNie jesteś zadowolony? Poproś o pełny zwrot pieniędzy w ciągu 30 dni od zakupu. Zobacz politykę zwrotów