sgcMQ Her broker, tek taşıyıcı. Gönderilecek DLL yok.

Yedi istemci bileşeni MQTT 3.1.1 ve 5.0, AMQP 0.9.1, AMQP 1.0, Apache Kafka tel protokolü ve STOMP 1.0'dan 1.2'ye kadar sürümleri konuşur; RabbitMQ ve ActiveMQ için broker lehçeleri de vardır. Her çerçeve kütüphanenin içinde Object Pascal ile ayrıştırılır ve yazılır, bu yüzden librdkafka, Paho, Qpid ya da dağıtılacak bir DLL yoktur. Yedisi de tek bir TsgcTCPClient üzerinde çalışır; düz veya TLS ile sarılı olarak açılır.

sgcWebSockets'in tek bir paketi. Fiyatlandırmayı görün →
  • MQTT 3.1.1 ve 5.0
  • AMQP 0.9.1
  • AMQP 1.0
  • Apache Kafka
  • STOMP 1.0'dan 1.2'ye
  • Delphi 7'den 13'e
  • C++ Builder
  • 7Tek bir palet sayfasında istemci bileşenleri
  • 5Her biri Object Pascal ile ayrıştırılan protokol aileleri
  • 6Hedefler: Win32, Win64, Linux64, macOS, iOS, Android
  • 0Harici kütüphaneler: librdkafka, Paho, Qpid veya DLL yok
  • 1Yedi bileşenin hepsi için taşıma katmanı
Tek API biçimi

Protokol başına bir bileşen. Yedisi için aynı yapı.

Protokol bileşenini forma bırakın, bir TsgcTCPClient örneğini Client özelliğine atayın, olayları bağlayın, ardından protokolün kendi fiillerini çağırın. Adlandırma yedisinde de tutarlıdır, bu yüzden birini öğrenmek geri kalanının büyük bölümünü de öğrenmek demektir.

Her broker için tek desen: Client özelliği üzerinden bir protokol bileşenine bağlı bir TsgcTCPClient, düz TCP veya TLS üzerinden

Bir TCP istemcisi ve bir protokol bileşeni

TsgcTCPClient soketi, ana makineyi ve bağlantı noktasını yönetir. Protokol bileşeni Client özelliği üzerinden bağlanır ve bunun üzerinde MQTT, AMQP, Kafka veya STOMP konuşur. Düz bir dinleyiciden şifreli bir dinleyiciye geçmek için bağlantı noktası numarasını değiştirmek ve TLS := True ayarını taşıyıcıda açmak yeter, üstündeki hiçbir şey değişmez.

Bir MQTT broker'ına bağlanma: CONNECT ve CONNACK alışverişinin yanında Delphi kodu

Birkaç satırda bağlanın

Taşıyıcıyı broker'ınıza yöneltin, TsgcWSPClient_MQTT bileşenini ekleyin, sürüm 5 veya 3.1.1'i tek bir MQTTVersion özelliğiyle seçin ve Active değerini True yapın. Bağlantının tamamı bu kadar.

PUBLISH, PUBACK, PUBREC, PUBREL ve PUBCOMP alışverişiyle MQTT hizmet kalitesi 0, 1 ve 2

Tüm QoS mekanizması olaylar olarak sunulur

QoS 0, 1 ve 2; PUBACK, PUBREC, PUBREL ve PUBCOMP alışverişi gizlenmez, olay olarak sunulur. Korunan (retained) mesajlar, Last Will and Testament, joker karakterli abonelikler ve sürdürülebilir oturumlar da gelir.

TCP istemcisinde üretim ayarları: WatchDog, HeartBeat ve TLS; kimlik doğrulama protokol bileşeninde

Üretim ayarları taşıyıcıda yer alır

WatchDog kopan bir bağlantıdan sonra yeniden bağlanır, heartbeat bağlantıyı canlı tutar ve TLS şifreler. Bunlar TCP istemcisinde yer alır, bu yüzden üstünde hangi protokol çalışırsa çalışsın bir kez ayarlarsınız. Kimlik doğrulama protokol bileşeninin kendisine aittir.

Çalışırken izleyin

Delphi'den yayımlayın ve abone olun, birkaç dakikada.

Seslendirmeli ve altyazılı bir hızlı başlangıç: her broker için tek bir desen, bir MQTT bağlantısı, konular ve hizmet kalitesi, ardından üretimde önem taşıyan ayarlar. Oynat düğmesine basana kadar hiçbir şey indirilmez.

sgcMQ hızlı başlangıç

Delphi'den bir broker'a bağlanın, bir konu filtresine abone olun ve yayımlayın.

  1. Tek desen, her brokerSoketi, ana makineyi ve bağlantı noktasını yöneten bir TCP istemcisi oluşturun, ardından Client özelliği üzerinden bir protokol bileşeni bağlayın.
  2. Bir MQTT broker'ına bağlanınTCP istemcisini broker'a yöneltin, MQTT bileşenini bağlayın, sürüm 5 veya 3.1.1'i seçin ve Active değerini True yapın.
  3. Abone olun ve yayımlayınSubscribe bir konu filtresi ve bir QoS alır. Publish bir konu, yük, QoS ve bir retain bayrağı alır. Mesajlar OnMQTTPublish olayında gelir.
  4. Diğer broker'lar için aynı desenExchange, kuyruk ve kanallı AMQP 0.9.1, AMQP 1.0, RabbitMQ ve ActiveMQ varyantlarıyla STOMP ve tüketici grupları ile offset'li Kafka.
  5. Üretime hazırTCP istemcisinde WatchDog, heartbeat ve TLS; protokol bileşeninde kimlik doğrulama.
Yedi bileşen

Beş protokol ailesi, yerel olarak uygulanmış.

sgcMQ, bir üretici SDK'sını sarmak yerine yayımlanmış protokolleri uygular ve her lisans tam kaynak kodu ile gelir; böylece protokol uygulamaları kendi hata ayıklayıcınızda adım adım izlenebilir.

MQTT 3.1.1 ve 5.0

TsgcWSPClient_MQTT her iki protokol sürümünü tek bir MQTTVersion özelliği arkasında kapsar: QoS 0, 1 ve 2, korunan mesajlar, Last Will and Testament, joker karakterli abonelikler ve sürdürülebilir oturumlar. Sürüm 5 ayrıca neden kodlarını, kullanıcı özelliklerini, konu takma adlarını, paylaşımlı abonelikleri ve AUTH gidiş dönüşünü ekler.

MQTT istemcisini görüntüleyin →

AMQP 0.9.1

TsgcWSPClient_AMQP RabbitMQ'nun üzerine kurulduğu protokolü konuşur: kanallar, exchange ve kuyruk bildirimi, bağlamalar (binding), tüketiciler, yayıncı onayları, prefetch QoS ve işlemler.

AMQP 0.9.1 istemcisini görüntüleyin →

AMQP 1.0

TsgcWSPClient_AMQP1 Azure Service Bus ve Event Hubs'ın arkasındaki OASIS standardını konuşur: konteynerler, oturumlar, gönderen ve alıcı bağlantıları, kredi tabanlı akış denetimi, SASL ve Claims-Based Security yardımcıları. Tel biçimi ve nesne modeli farklı olduğu için kendi bileşenine sahiptir.

AMQP 1.0 istemcisini görüntüleyin →

Apache Kafka

TsgcWSPClient_Kafka TCP üzerinden Kafka ikili protokolünü konuşur, v2 kayıt toplu biçimi dahil. Seçilen acks düzeyi ve gzip sıkıştırmasıyla üretin, koordinatör keşfi, katılım, eşitleme, heartbeat ve yeniden dengelemenin sizin yerinize yürütüldüğü bir grup üzerinden tüketin ya da bir bölümü offset'e göre okuyun.

Kafka istemcisini görüntüleyin →

STOMP 1.0'dan 1.2'ye

TsgcWSPClient_STOMP SEND, SUBSCRIBE, UNSUBSCRIBE, ACK, NACK, makbuzları, çift yönlü heart-beat'i ve BEGIN, COMMIT ile ABORT işlem çerçevelerini yönetir. İki türetilmiş sınıf broker hedef kurallarını adlandırılmış yöntemlere çevirir, biri RabbitMQ, diğeri ActiveMQ içindir.

STOMP istemcilerini görüntüleyin →

Altı hedef, dipnot yok

Yedi istemcinin hepsi ve altlarındaki taşıyıcı, Delphi 7'den RAD Studio 13'e ve C++ Builder için Win32, Win64, Linux64, macOS, iOS ve Android'e kayıtlıdır. Mesajlaşma paketinde platform kısıtlaması yoktur.

Özellik matrisi →
Kod

Dört protokol, aynı yapı.

Protokol bileşenini oluşturun, taşıyıcıyı atayın, olayları bağlayın, fiilleri çağırın. Düz bir dinleyiciden şifreli bir dinleyiciye geçmek için bağlantı noktası numarasını değiştirmek ve TLS := True ayarını taşıyıcıda açmak yeter, üstündeki hiçbir şey değişmez.

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. Protokol bileşenini oluşturunProtokol başına bir bileşen: MQTT, AMQP 0.9.1, AMQP 1.0, Kafka, STOMP, RabbitMQ için STOMP ve ActiveMQ için STOMP.
  2. Taşıyıcıyı atayınClient özelliğini, broker'ın ana makinesi ve bağlantı noktasıyla bir TsgcTCPClient'a ayarlayın. TLS, proxy ve yeniden bağlanma orada, bir kez yapılandırılır.
  3. Olayları bağlayınBağlantı, mesaj ve onay olayları bileşende, protokolün kendi özellikleriyle birlikte gelir.
  4. Fiilleri çağırınSubscribe ve Publish, DeclareQueue ve Consume, Produce ve Poll, SubscribeQueue ve PublishQueue: protokolün zaten kullandığı adlar.

Object Pascal'da ve C++ Builder'da aynı yapı, diğer üç bileşen için de aynı yapı. Tam özellik matrisi →

Satın almadan önce

Önce bilmeye değer iki şey.

sgcMQ'nun sizden ne beklediği ve baytların broker'a nasıl ulaştığı. İki yanıt da kısadır ve ikisi de küçük puntolarda değil bu sayfada yer alır.

Yerel broker dinleyicileri
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 bağımsızdır

Bileşenlerin ihtiyaç duyduğu her şey sgcMQ içinde paketlidir: sgcWebSockets Core çalışma zamanı, TsgcTCPClient taşıyıcısı, TLS katmanı ve JSON yardımcıları. Tek bir yükleyici, kutuda tam kaynak kodu.

Düz TCP ve TLS, yalnızca bunlar

Paketteki her protokol, düz olarak ya da TLS ile sarılı açılan ham bir soket üzerinde çalışır; MQTT, AMQP, Kafka ve STOMP normalde böyle dağıtılır. Bir protokolü bunun yerine WebSocket üzerinden çalıştırmak, örneğin WebSocket üzerinden MQTT veya Web-STOMP, WebSocket istemcisini gerektirir ve bu şununla birlikte gelir: sgcWebSockets. Karar vermeden önce broker'ınızın hangi taşımayı sunduğunu kontrol edin.

Delphi ve C++ Builder

sgcMQ, Delphi 7'den RAD Studio 13'e ve C++ Builder'ı altı platformda da hedefler. Bu paketin .NET sürümü yoktur. .NET'ten mesajlaşma gerekiyorsa, şurada bulunur: sgcWebSockets.

Taşıyıcı altyapıyı üstlenir

TLSOptions.IOHandler çapraz platform derlemeleri için OpenSSL'i, Windows'ta ise SChannel'ı seçer, WatchDog kopan bir bağlantıdan sonra yeniden bağlanır, HTTP CONNECT proxy geçişi ve IPv6 için ek yapılandırma gerekmez. Bir kez ayarlayın, üstündeki her protokol bunu devralır.

sgcMQ, bir üretici SDK'sını sarmak yerine yayımlanmış protokolleri uygular, bu yüzden broker seçimi sizindir: RabbitMQ, Apache Kafka, Eclipse Mosquitto, HiveMQ, EMQX, Apache ActiveMQ, Azure Service Bus ve Event Hubs ya da AWS IoT Core.

sgcWebSockets'in parçası

sgcWebSockets'in kendi başına lisanslanan tek bir paketi.

sgcMQ, üzerine kurulduğu sgcWebSockets Core çalışma zamanını içerir, bu yüzden başka bir eSeGeCe lisansı gerekmez. Her lisans tam kaynak kodunu ve altı hedefin hepsinde telifsiz dağıtımı içerir.

Single

1 geliştirici lisansı. Aynı anda tek makinede kullanım.

€249

Team

2 geliştirici lisansı. Aynı anda iki makinede kullanım.

€399

Site

Sınırsız geliştirici. Tüm şirket makineleri.

€649

Delphi ve C++ Builder için MQTT, AMQP 0.9.1 ve 1.0, Apache Kafka ve STOMP istemci bileşenleri; sgcWebSockets Core çalışma zamanı dahildir. WebSocket taşımalarına veya .NET'e de mi ihtiyacınız var? Bunlar şununla birlikte gelir: sgcWebSockets.

Fiyatlandırmayı ve lisansları görüntüleyin
Referanslar

Geliştiriciler Ne Diyor

Dünya genelinde Delphi, C++ Builder, Lazarus ve .NET geliştiricilerinin güvendiği çözüm.

sgcWebSockets kütüphaneniz çok kullanışlı ve kurulumu kolay. İyi çalışmalarınızı sürdürün!
Simone Moretti Delphi Geliştiricisi
sgcWebSockets harika ve desteğiniz en iyisi!
Christian Meyer Kurucu ve CTO
Yardımınız ve desteğiniz için çok teşekkürler, bileşenlerinize bayılıyorum.
Mark Steinfeld CTO

Delphi'den broker'ınızla konuşun.

MQTT, AMQP, Kafka ve STOMP tek pakette, yerel olarak uygulanmış; sgcWebSockets Core çalışma zamanı dahil ve tam kaynak kodu kutuda. Windows, Linux, macOS, iOS ve Android, aynı koddan.

eSeGeCe'den daha fazlası

eSeGeCe'nin Diğer Ürünleri

sgcMQ, Delphi, C++ Builder ve .NET için diğer eSeGeCe bileşen kütüphaneleriyle aynı kuralları paylaşır. Tam kaynakla gelirler ve telifsiz dağıtılırlar.

sgcWebSockets

Delphi, C++ Builder, Lazarus ve .NET için WebSocket, HTTP/2, MQTT, AMQP, WebRTC, yapay zeka ve 30'dan fazla API entegrasyonu. WebSocket taşıyıcısı burada yer alır.

sgcAuth

Delphi ve C++ Builder için OAuth2 istemcisi, JWT istemcisi ve WebAuthn desteği. Bağımsız, sgcWebSockets Core çalışma zamanı dahil.

sgcHTTP

Delphi ve C++ Builder için HTTP sunucusu, HTTP/2 istemcisi, gRPC istemcisi ve Google Cloud Pub/Sub, Calendar ve FCM istemcileri. Bağımsız ürün, sgcWebSockets Core çalışma zamanı pakete dahildir.

sgcREST

Delphi ve C++ Builder için REST sunucusu, OpenAPI sunucusu ve OpenAPI istemci bileşenleri. Bağımsız çalışır, sgcWebSockets Core çalışma zamanı dahildir.

sgcAI

Delphi ve C++ Builder için yapay zeka, LLM ve MCP bileşenleri. Tek bir bileşenin arkasında yedi LLM sağlayıcısı, ayrıca MCP, embeddings ve konuşma. Bağımsız ürün, sgcWebSockets Core çalışma zamanı pakete dahildir.

sgcHTML

Bootstrap 5 ve htmx üzerinde sunucu taraflı HTML ve arayüz bileşenleri. sgcMQ'nun tükettiği kuyrukların önüne canlı bir pano koyun.

sgcQUIC

Ham QUIC taşıması ve WebTransport dahil bir HTTP/3 istemcisi ve sunucusu. sgcWebSockets Enterprise'a bir eklenti.

sgcOpenAPI

OpenAPI 3.x ayrıştırıcısı, yerel Pascal SDK üreticisi, OpenAPI sunucu bileşeni ve 1.195+ önceden oluşturulmuş bulut SDK'si.

sgcSign

Belgeler için XAdES, PAdES, CAdES ve ASiC; kod için Authenticode, ClickOnce, NuGet ve VSIX.

sgcPDF

PDF dosyalarını saf Object Pascal ile oluşturma, düzenleme, görüntüleme, imzalama, sansürleme ve doğrulama; dağıtılacak DLL yok. Ayrı olarak lisanslanır.

sgcBiometrics

Delphi ve C++ Builder için Windows Hello, parmak izi sensörleri ve Windows Biometric Framework.

sgcIndy

Delphi 7'den 13'e modern TLS, IPv6 ve HTTP/2 ile güncellenmiş Indy TCP/IP bileşenleri.

Blogdan Son Yazılar

Tüm yazıları görüntüleyin →

eSeGeCe'nin sgcMQ görünümünü görüyorsunuz.

Bana başka bir açı gösterin →
30 Günlük Para İade GarantisiMemnun kalmadınız mı? Satın alımdan sonraki 30 gün içinde tam para iadesi talep edin. İade politikasına bakın