MQTT 3.1.1 & 5.0
TsgcWSPClient_MQTT は、1 つの MQTTVersion プロパティで両方のプロトコルバージョンに対応します。QoS 0、1、2、保持メッセージ、Last Will and Testament、ワイルドカードサブスクリプション、再開可能なセッション。バージョン 5 では、理由コード、ユーザープロパティ、トピックエイリアス、共有サブスクリプション、AUTH のやり取りが加わります。
7 つのクライアントコンポーネントが、MQTT 3.1.1 と 5.0、AMQP 0.9.1、AMQP 1.0、Apache Kafka のワイヤープロトコル、STOMP 1.0 から 1.2 に対応し、RabbitMQ と ActiveMQ 向けのブローカー方言も扱えます。すべてのフレームはライブラリ内部で Object Pascal により解析・書き込みされるため、librdkafka も Paho も Qpid も不要で、配布する DLL もありません。7 つすべてが 1 つの TsgcTCPClientの上で動作し、平文でも TLS で包んでも接続できます。
フォームにプロトコルコンポーネントを置き、 TsgcTCPClient を Client プロパティに割り当て、イベントを接続して、プロトコル固有のメソッドを呼び出します。命名は 7 つすべてで一貫しているため、1 つ覚えれば残りもほぼ理解できます。

TsgcTCPClient がソケット、ホスト、ポートを管理します。プロトコルコンポーネントは Client プロパティ経由で接続し、その上で MQTT、AMQP、Kafka、STOMP を話します。平文のリスナーから暗号化されたリスナーへの切り替えは、ポート番号と TLS := True をキャリアに設定するだけで、それより上は何も変わりません。

キャリアをブローカーに向け、 TsgcWSPClient_MQTTを接続し、 MQTTVersion プロパティでバージョン 5 または 3.1.1 を選び、 Active を True に設定します。接続はこれで完了です。

QoS 0、1、2 に対応し、PUBACK、PUBREC、PUBREL、PUBCOMP のやり取りは隠さずイベントとして公開されます。保持メッセージ、Last Will and Testament、ワイルドカードサブスクリプション、再開可能なセッションも利用できます。

WatchDog は切断後に再接続し、ハートビートが接続を維持し、TLS が通信を暗号化します。これらは TCP クライアントにあるため、上でどのプロトコルを使っても一度設定すれば済みます。認証はプロトコルコンポーネント自体に属します。
ナレーションと字幕付きのクイックスタートです。すべてのブローカーに共通のパターン、MQTT 接続、トピックとサービス品質、そして本番で重要な設定を紹介します。再生ボタンを押すまで何もダウンロードされません。
Delphi からブローカーに接続し、トピックフィルターをサブスクライブして、パブリッシュします。
sgcMQ はベンダー SDK をラップするのではなく、公開されているプロトコルを実装しています。どのライセンスにも完全なソースコードが付属するため、プロトコルの実装を自分のデバッガーでステップ実行できます。
TsgcWSPClient_MQTT は、1 つの MQTTVersion プロパティで両方のプロトコルバージョンに対応します。QoS 0、1、2、保持メッセージ、Last Will and Testament、ワイルドカードサブスクリプション、再開可能なセッション。バージョン 5 では、理由コード、ユーザープロパティ、トピックエイリアス、共有サブスクリプション、AUTH のやり取りが加わります。
TsgcWSPClient_AMQP は RabbitMQ が想定するプロトコルを話します。チャネル、エクスチェンジとキューの宣言、バインディング、コンシューマー、パブリッシャー確認応答、プリフェッチ QoS、トランザクションに対応します。
TsgcWSPClient_AMQP1 は、Azure Service Bus と Event Hubs の基盤となる OASIS 標準を話します。コンテナー、セッション、送信側と受信側のリンク、クレジットベースのフロー制御、SASL、Claims-Based Security のヘルパーに対応します。ワイヤーフォーマットもオブジェクトモデルも異なるため、専用のコンポーネントを用意しています。
TsgcWSPClient_Kafka は TCP 上で Kafka のバイナリプロトコルを話し、v2 レコードバッチ形式にも対応します。acks レベルと gzip 圧縮を選んで Produce でき、コーディネーターの検出、参加、同期、ハートビート、リバランスを任せたグループ経由での Consume や、オフセット指定でのパーティション読み取りも可能です。
TsgcWSPClient_STOMP は、SEND、SUBSCRIBE、UNSUBSCRIBE、ACK、NACK、レシート、双方向のハートビート、BEGIN、COMMIT、ABORT のトランザクションフレームを処理します。2 つの派生コンポーネントが、ブローカー固有の宛先の規約を名前付きメソッドにします。1 つは RabbitMQ 用、もう 1 つは ActiveMQ 用です。
7 つのクライアントとその下のキャリアはすべて、Win32、Win64、Linux64、macOS、iOS、Android に登録されており、Delphi 7 から RAD Studio 13、そして C++ Builder で利用できます。このメッセージングパックにプラットフォームの制限はありません。
機能マトリックス →プロトコルコンポーネントを作成し、キャリアを割り当て、イベントを接続して、メソッドを呼び出します。平文のリスナーから暗号化されたリスナーへの切り替えは、ポート番号と TLS := True をキャリアに設定するだけで、それより上は何も変わりません。
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 でも C++ Builder でも同じ形で、他の 3 つのコンポーネントでも同じ形です。 完全な機能マトリックス →
sgcMQ に必要なもの、そしてデータがどのようにブローカーへ届くのか。どちらの答えも短く、細かい注意書きではなくこのページに書いてあります。
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 に同梱されています。sgcWebSockets Core のランタイム、 TsgcTCPClient キャリア、TLS レイヤー、JSON ヘルパーです。インストーラーは 1 つで、完全なソースコードが付属します。
このパックのすべてのプロトコルは、平文または TLS で包んだ生のソケット上で動作します。MQTT、AMQP、Kafka、STOMP は通常このように配備されます。WebSocket 上でプロトコルを動かす場合、たとえば MQTT over WebSocket や Web-STOMP には WebSocket クライアントが必要で、それは sgcWebSocketsに含まれています。ブローカーがどのトランスポートを公開しているか、選ぶ前にご確認ください。
sgcMQ は Delphi 7 から RAD Studio 13 と C++ Builder を対象とし、6 つのプラットフォームすべてで動作します。このパックの .NET 版はありません。.NET からメッセージングを使う場合は、 sgcWebSocketsに含まれています。
TLSOptions.IOHandler は、クロスプラットフォームのビルドでは OpenSSL を、Windows では SChannel を選択します。 WatchDog は切断後に再接続し、HTTP CONNECT によるプロキシ経由の接続と IPv6 には追加設定が不要です。一度設定すれば、その上のすべてのプロトコルが引き継ぎます。
sgcMQ はベンダー SDK をラップせず、公開されているプロトコルを実装しているため、ブローカーは自由に選べます。RabbitMQ、Apache Kafka、Eclipse Mosquitto、HiveMQ、EMQX、Apache ActiveMQ、Azure Service Bus と Event Hubs、AWS IoT Core などです。ブローカーの切り替えは、ホスト、ポート、認証情報の変更だけで済みます。
sgcMQ は基盤となる sgcWebSockets Core のランタイムを同梱しているため、他の eSeGeCe ライセンスは不要です。どのライセンスにも、完全なソースコードと、6 つのターゲットすべてでのロイヤリティフリーでの配布が含まれます。
開発者 1 名のライセンス。同時に 1 台のマシンで使用できます。
開発者 2 名のライセンス。同時に 2 台のマシンで使用できます。
開発者数無制限。社内のすべてのマシンで使用できます。
Delphi と C++ Builder 向けの MQTT、AMQP 0.9.1 / 1.0、Apache Kafka、STOMP クライアントコンポーネントで、sgcWebSockets Core のランタイムを同梱しています。WebSocket トランスポートや .NET も必要ですか? それらは sgcWebSocketsに含まれています。
価格とライセンスを見る世界中の Delphi、C++ Builder、Lazarus、.NET 開発者から信頼されています。
sgcWebSockets ライブラリはとても便利でセットアップも簡単です。これからも頑張ってください!
sgcWebSockets は素晴らしく、サポートも最高です!
ご支援とサポートに本当に感謝しています。コンポーネントが大好きです。
MQTT、AMQP、Kafka、STOMP を 1 つのパッケージでネイティブに実装し、sgcWebSockets Core のランタイムを同梱、完全なソースコードも付属します。Windows、Linux、macOS、iOS、Android に同じコードで対応します。
sgcMQ は、Delphi、C++ Builder、.NET 向けの他の eSeGeCe コンポーネントライブラリと同じ規約を共有しています。いずれも完全なソースコード付きで、ロイヤリティフリーで配布できます。
Delphi、C++ Builder、Lazarus、.NET 向けの WebSocket、HTTP/2、MQTT、AMQP、WebRTC、AI、そして 30 種類以上の API 統合。WebSocket キャリアはこちらに含まれます。
Delphi と C++ Builder 向けの OAuth2 クライアント、JWT クライアント、WebAuthn 対応。単体で提供され、sgcWebSockets Core ランタイムが同梱されます。
Delphi と C++ Builder 向けの HTTP サーバー、HTTP/2 クライアント、gRPC クライアント、そして Google Cloud の Pub/Sub、Calendar、FCM クライアントです。単体製品で、sgcWebSockets Core ランタイムを同梱しています。
Delphi と C++ Builder 向けの REST サーバー、OpenAPI サーバー、OpenAPI クライアントのコンポーネント。単体で提供され、sgcWebSockets Core ランタイムが同梱されます。
Delphi と C++ Builder 向けの AI、LLM、MCP コンポーネント。1 つのコンポーネントで 7 社の LLM プロバイダーに対応し、MCP、埋め込み、音声も利用できます。単体製品で、sgcWebSockets Core ランタイムを同梱しています。
Bootstrap 5 と htmx を基盤としたサーバーサイド HTML と UI コンポーネント。sgcMQ が消費するキューの前に、ライブダッシュボードを置けます。
生の QUIC トランスポートと、HTTP/3 クライアントおよびサーバー、WebTransport。sgcWebSockets Enterprise のアドオンです。
OpenAPI 3.x パーサー、ネイティブ Pascal SDK ジェネレーター、OpenAPI サーバーコンポーネント、そして 1,195 以上のビルド済みクラウド SDK。
ドキュメントには XAdES、PAdES、CAdES、ASiC、コードには Authenticode、ClickOnce、NuGet、VSIX。
PDF ファイルの作成、編集、表示、署名、墨消し、検証を純粋な Object Pascal で提供します。DLL の配布は不要で、単体でライセンスされます。
Delphi と C++ Builder 向けの Windows Hello、指紋センサー、Windows Biometric Framework。
モダンな TLS、IPv6、HTTP/2 に対応した更新版 Indy TCP/IP コンポーネント。Delphi 7 から 13 まで対応します。