eSeGeCe — Delphi ve .NET için Kurumsal İletişim Bileşenleri
ÖNE ÇIKAN · sgcMQ

Her broker, tek taşıyıcı

Yedi istemci bileşeni; MQTT 3.1.1 ve 5.0, AMQP 0.9.1, AMQP 1.0, Apache Kafka hat protokolü ve STOMP 1.0'dan 1.2'ye kadar 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 yok, Paho yok, Qpid yok ve dağıtılacak DLL yok. Yedisi de düz olarak açılan ya da TLS ile sarmalanan tek bir TsgcTCPClient üzerinde taşınır.

  • 7 istemci bileşeni
  • 5 protokol ailesi
  • Windows · Linux · macOS · iOS · Android
  • Delphi 7'den 13'e · C++ Builder

Beş Protokol Ailesi, Yedi Bileşen

sgcMQ bağımsız bir pakettir. Üzerine kurulduğu sgcWebSockets Core çalışma zamanını pakete dahil eder ve her lisans tam kaynak koduyla gelir; böylece protokol uygulamalarında kendi hata ayıklayıcınızla adım adım ilerleyebilirsiniz.

7 İstemci bileşeni MQTT, AMQP 0.9.1, AMQP 1.0, Kafka, STOMP, STOMP RabbitMQ ve STOMP ActiveMQ, tek bir palet sayfasında.
5 Protokol ailesi Her hat formatı, kütüphanenin içinde Object Pascal ile ayrıştırılır ve yazılır.
6 Hedef platform Win32, Win64, Linux64, macOS, iOS ve Android, tek bir kaynak ağacından.
0 Harici kütüphane librdkafka yok, Paho yok, Qpid yok, DLL yok ve önde REST proxy'si yok.
1 Taşıyıcı Tek bir TsgcTCPClient yedisini de taşır; böylece TLS, proxy ve yeniden bağlanma bir kez yapılandırılır.
sgcMQ

Delphi ve C++ Builder için mesaj kuyruğu ve akış istemcileri. sgcWebSockets Core çalışma zamanı pakete dahil bağımsız bir paket, tam kaynak kodu ve altı hedefin tümünde telifsiz dağıtım.

Protokol Başına Bir Bileşen, Tek API Stili

Protokol bileşenini bir forma bırakın, Client özelliğine bir TsgcTCPClient atayın, olayları bağlayın, sonra protokolün kendi fiillerini çağırın. Adlandırma yedisinde de tutarlıdır; birini öğrendiğinizde geri kalanının büyük bölümünü de öğrenmiş olursunuz.

MQTT 3.1.1 ve 5.0

Yayınlama, Abonelik ve Tüm QoS Mekanizması

TsgcWSPClient_MQTT, her iki protokol sürümünü tek bir MQTTVersion özelliğinin arkasında kapsar. PUBACK, PUBREC, PUBREL ve PUBCOMP alışverişi gizlenmek yerine olay olarak sunulan QoS 0, 1 ve 2; kalıcı (retained) mesajlar, Last Will and Testament, joker karakterli abonelikler ve devam ettirilebilir oturumlar. Sürüm 5; 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 ve 1.0

Aynı Adı Paylaşan İki Protokol

TsgcWSPClient_AMQP, RabbitMQ'nun üzerine kurulduğu protokol olan AMQP 0.9.1'i konuşur: kanallar, exchange ve kuyruk bildirimi, bağlamalar, tüketiciler, yayıncı onayları, prefetch QoS ve işlemler. TsgcWSPClient_AMQP1, Azure Service Bus ve Event Hubs'ın arkasındaki OASIS standardı olan AMQP 1.0'ı konuşur: konteynerler, oturumlar, gönderici ve alıcı bağlantıları, kredi tabanlı akış kontrolü, SASL ve Claims-Based Security yardımcıları. Hat formatı farklı, nesne modeli farklı; bu yüzden her biri için ayrı bir bileşen vardır.

AMQP 0.9.1 → AMQP 1.0 →
Apache Kafka

İkili Protokol, Doğrudan Konuşulur

TsgcWSPClient_Kafka, v2 kayıt toplu işi (record batch) formatı dahil, Kafka hat protokolünü TCP üzerinden konuşur. Seçtiğiniz acks düzeyi ve gzip sıkıştırmasıyla üretin; koordinatör keşfi, katılma, eşitleme, kalp atışı ve yeniden dengelemenin sizin için yönetildiği bir grup üzerinden tüketin ya da bir bölümü offset ile okuyun.

Kafka istemcisini görüntüleyin →
STOMP 1.0'dan 1.2'ye

Tek Genel İstemci, İki Broker Lehçesi

TsgcWSPClient_STOMP; SEND, SUBSCRIBE, UNSUBSCRIBE, ACK, NACK, alındıları, çift yönlü kalp atışını ve BEGIN, COMMIT ve ABORT işlem çerçevelerini yönetir. İki türev bileşen, broker hedef adlandırma kurallarını adlandırılmış metotlara dönüştürür: biri RabbitMQ, biri ActiveMQ için.

STOMP istemcilerini görüntüleyin →
Çok platformlu

Altı Hedef, Yıldız İşareti Yok

Yedi istemcinin tümü ve altlarındaki taşıyıcı; Delphi 7'den RAD Studio 13'e ve C++ Builder'da, Win32, Win64, Linux64, macOS, iOS ve Android için kayıtlıdır. Mesajlaşma paketi hiçbir platform kısıtlaması taşımaz.

Özellik matrisi →

Her bileşen için referans sayfaları:

Dört Protokol, Aynı Şekil

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, taşıyıcıda bir bağlantı noktası numarası ve TLS := True demektir; ü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;

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

Önce Bilmeye Değer İki Şey

sgcMQ'nun sizden neye ihtiyaç duyduğu ve baytların broker'a nasıl ulaştığı. İki yanıt da kısadır ve ikisi de küçük yazılarda değil, bu sayfadadır.

Yerel broker dinleyicileri
protokol            bileşen                         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

* broker'ın kendi şifreli dinleyicisi nasıl yapılandırıldıysa o.
  Bunlar geleneksel varsayılanlardır. Taşıyıcının Port özelliği,
  dağıtımınızın gerçekte dinlediği değeri alır.

sgcMQ bağımsızdır

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

Düz TCP ve TLS, yalnızca bu

Paketteki her protokol, düz olarak açılan ya da TLS ile sarmalanan ham bir soket üzerinde taşınır. Bu, burada listelenen yerel broker bağlantı noktalarını kapsar; MQTT, AMQP, Kafka ve STOMP normalde bu şekilde dağıtılır. Bir protokolü bunun yerine WebSocket üzerinden çalıştırmak, örneğin MQTT over WebSocket veya Web-STOMP, WebSocket istemcisini gerektirir ve o istemci sgcWebSockets ile gelir. Seçim yapmadan önce broker'ınızın hangi taşımayı sunduğunu kontrol edin.

Delphi ve C++ Builder

sgcMQ; altı platformun tümünde Delphi 7'den RAD Studio 13'e kadar Delphi'yi ve C++ Builder'ı hedefler. Bu paketin .NET derlemesi yoktur. .NET'ten mesajlaşmaya ihtiyacınız varsa, o sgcWebSockets içinde yer alır.

Tesisat işini taşıyıcı yapar

TLSOptions.IOHandler, çok platformlu derlemeler için OpenSSL'i veya Windows'ta SChannel'ı seçer; WatchDog kopan bir bağlantının ardından yeniden bağlanır; HTTP CONNECT proxy geçişi ve IPv6 ek yapılandırma gerektirmez. Bir kez ayarlayın, üzerindeki her protokol bunu devralır.

OpenSSL SChannel Karşılıklı TLS HTTP proxy WatchDog yeniden bağlanma

Her bileşen ve özellik →

sgcMQ, bir üretici SDK'sini sarmalamak yerine yayımlanmış protokolleri uygular; bu yüzden broker seçimi size aittir: RabbitMQ, Apache Kafka, Eclipse Mosquitto, HiveMQ, EMQX, Apache ActiveMQ, Azure Service Bus ve Event Hubs veya AWS IoT Core. Broker değiştirmek; bir ana bilgisayar, bir bağlantı noktası ve bir kimlik bilgisi kümesinden ibarettir.

Dokuz Kütüphane, Tek Araç Kutusu

sgcMQ, Delphi, C++ Builder ve .NET için dokuz eSeGeCe bileşen kütüphanesinden biridir. Aynı kuralları paylaşırlar, tam kaynak koduyla gelirler ve telifsiz dağıtılırlar.

sgcMQ

Delphi ve C++ Builder için MQTT, AMQP 0.9.1 ve 1.0, Apache Kafka ve STOMP istemci bileşenleri. Bağımsız ürün, sgcWebSockets Core çalışma zamanı pakete dahildir.

Daha fazla bilgi →

sgcWebSockets

Delphi, C++ Builder, Lazarus ve .NET için WebSocket, HTTP/2, MQTT, AMQP, WebRTC, yapay zeka ve 30+ API entegrasyonu. WebSocket taşıyıcısının bulunduğu yer burasıdır.

Daha fazla bilgi →

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 gösterge paneli koyun.

Daha fazla bilgi →

sgcQUIC

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

Daha fazla bilgi →

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.

Daha fazla bilgi →

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.

Daha fazla bilgi →

sgcSign

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

Daha fazla bilgi →

sgcBiometrics

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

Daha fazla bilgi →

sgcIndy

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

Daha fazla bilgi →

Fiyatlandırmayı ve lisansları görüntüleyin Ücretsiz denemeyi indirin

Geliştiriciler Ne Diyor

Dünya çapında Delphi, C++ Builder, Lazarus ve .NET geliştiricilerinin güvendiği.

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

eSeGeCe'nin Mesajlaşma görünümünü görüyorsunuz.

Bana başka bir açı gösterin →

Broker'ınızla Delphi'den Konuşun

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