sgcMQ あらゆるブローカーに、 キャリアは 1 つ。 配布する DLL は不要です。

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 で包んでも接続できます。

sgcWebSockets の単体パッケージです。価格を見る →
  • MQTT 3.1.1 & 5.0
  • AMQP 0.9.1
  • AMQP 1.0
  • Apache Kafka
  • STOMP 1.0 から 1.2
  • Delphi 7~13
  • C++ Builder
  • 71 つのパレットページに並ぶクライアントコンポーネント
  • 5プロトコルファミリー、すべて Object Pascal で解析
  • 6対応ターゲット: Win32、Win64、Linux64、macOS、iOS、Android
  • 0外部ライブラリ: librdkafka、Paho、Qpid、DLL は不要
  • 17 つすべてのコンポーネントが使うトランスポートキャリア
1 つの API スタイル

プロトコルごとに 1 つのコンポーネント。7 つすべてが同じ形です。

フォームにプロトコルコンポーネントを置き、 TsgcTCPClient を Client プロパティに割り当て、イベントを接続して、プロトコル固有のメソッドを呼び出します。命名は 7 つすべてで一貫しているため、1 つ覚えれば残りもほぼ理解できます。

すべてのブローカーに共通のパターン: Client プロパティを通じてプロトコルコンポーネントに接続した TsgcTCPClient。プレーン TCP でも TLS でも利用できます

TCP クライアントとプロトコルコンポーネント

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

MQTT ブローカーへの接続: CONNECT と CONNACK のやり取りと並べた Delphi コード

数行で接続

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

MQTT のサービス品質 0、1、2 と、PUBLISH、PUBACK、PUBREC、PUBREL、PUBCOMP のやり取り

QoS の仕組みをすべてイベントとして公開

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

TCP クライアントの本番向け設定: WatchDog、HeartBeat、TLS。認証はプロトコルコンポーネントで設定します

本番向けの設定はキャリアにあります

WatchDog は切断後に再接続し、ハートビートが接続を維持し、TLS が通信を暗号化します。これらは TCP クライアントにあるため、上でどのプロトコルを使っても一度設定すれば済みます。認証はプロトコルコンポーネント自体に属します。

動作を見る

Delphi からのパブリッシュとサブスクライブを、数分で。

ナレーションと字幕付きのクイックスタートです。すべてのブローカーに共通のパターン、MQTT 接続、トピックとサービス品質、そして本番で重要な設定を紹介します。再生ボタンを押すまで何もダウンロードされません。

sgcMQ クイックスタート

Delphi からブローカーに接続し、トピックフィルターをサブスクライブして、パブリッシュします。

  1. 1 つのパターンで、すべてのブローカーソケット、ホスト、ポートを管理する TCP クライアントを作成し、Client プロパティを通じてプロトコルコンポーネントを接続します。
  2. MQTT ブローカーに接続TCP クライアントをブローカーに向け、MQTT コンポーネントを接続し、バージョン 5 または 3.1.1 を選んで Active を True にします。
  3. サブスクライブとパブリッシュSubscribe はトピックフィルターと QoS を受け取ります。Publish はトピック、ペイロード、QoS、保持フラグを受け取ります。メッセージは OnMQTTPublish で届きます。
  4. 他のブローカーにも同じパターンエクスチェンジ、キュー、チャネルを備えた AMQP 0.9.1、AMQP 1.0、RabbitMQ と ActiveMQ のバリアントに対応した STOMP、コンシューマーグループとオフセットを備えた Kafka。
  5. 本番環境に対応WatchDog、ハートビート、TLS は TCP クライアントで、認証はプロトコルコンポーネントで設定します。
7 つのコンポーネント

5 つのプロトコルファミリーをネイティブに実装。

sgcMQ はベンダー SDK をラップするのではなく、公開されているプロトコルを実装しています。どのライセンスにも完全なソースコードが付属するため、プロトコルの実装を自分のデバッガーでステップ実行できます。

MQTT 3.1.1 & 5.0

TsgcWSPClient_MQTT は、1 つの MQTTVersion プロパティで両方のプロトコルバージョンに対応します。QoS 0、1、2、保持メッセージ、Last Will and Testament、ワイルドカードサブスクリプション、再開可能なセッション。バージョン 5 では、理由コード、ユーザープロパティ、トピックエイリアス、共有サブスクリプション、AUTH のやり取りが加わります。

MQTT クライアントを見る →

AMQP 0.9.1

TsgcWSPClient_AMQP は RabbitMQ が想定するプロトコルを話します。チャネル、エクスチェンジとキューの宣言、バインディング、コンシューマー、パブリッシャー確認応答、プリフェッチ QoS、トランザクションに対応します。

AMQP 0.9.1 クライアントを見る →

AMQP 1.0

TsgcWSPClient_AMQP1 は、Azure Service Bus と Event Hubs の基盤となる OASIS 標準を話します。コンテナー、セッション、送信側と受信側のリンク、クレジットベースのフロー制御、SASL、Claims-Based Security のヘルパーに対応します。ワイヤーフォーマットもオブジェクトモデルも異なるため、専用のコンポーネントを用意しています。

AMQP 1.0 クライアントを見る →

Apache Kafka

TsgcWSPClient_Kafka は TCP 上で Kafka のバイナリプロトコルを話し、v2 レコードバッチ形式にも対応します。acks レベルと gzip 圧縮を選んで Produce でき、コーディネーターの検出、参加、同期、ハートビート、リバランスを任せたグループ経由での Consume や、オフセット指定でのパーティション読み取りも可能です。

Kafka クライアントを見る →

STOMP 1.0 から 1.2

TsgcWSPClient_STOMP は、SEND、SUBSCRIBE、UNSUBSCRIBE、ACK、NACK、レシート、双方向のハートビート、BEGIN、COMMIT、ABORT のトランザクションフレームを処理します。2 つの派生コンポーネントが、ブローカー固有の宛先の規約を名前付きメソッドにします。1 つは RabbitMQ 用、もう 1 つは ActiveMQ 用です。

STOMP クライアントを見る →

6 つのターゲット、但し書きなし

7 つのクライアントとその下のキャリアはすべて、Win32、Win64、Linux64、macOS、iOS、Android に登録されており、Delphi 7 から RAD Studio 13、そして C++ Builder で利用できます。このメッセージングパックにプラットフォームの制限はありません。

機能マトリックス →
コード

4 つのプロトコル、同じ形。

プロトコルコンポーネントを作成し、キャリアを割り当て、イベントを接続して、メソッドを呼び出します。平文のリスナーから暗号化されたリスナーへの切り替えは、ポート番号と 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;
  1. プロトコルコンポーネントを作成プロトコルごとに 1 つのコンポーネント: MQTT、AMQP 0.9.1、AMQP 1.0、Kafka、STOMP、RabbitMQ 用 STOMP、ActiveMQ 用 STOMP。
  2. キャリアを割り当てるClient プロパティに、ブローカーのホストとポートを設定した TsgcTCPClient を指定します。TLS、プロキシ、再接続の設定はそこで一度行うだけです。
  3. イベントを接続する接続、メッセージ、確認応答のイベントがコンポーネントに届き、プロトコル固有のプロパティも付いてきます。
  4. メソッドを呼び出すSubscribe と Publish、DeclareQueue と Consume、Produce と Poll、SubscribeQueue と PublishQueue。プロトコルがもともと使っている名前のままです。

Object Pascal でも C++ Builder でも同じ形で、他の 3 つのコンポーネントでも同じ形です。 完全な機能マトリックス →

ご購入の前に

先に知っておきたい 2 つのこと。

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 は単体で動作します

コンポーネントに必要なものはすべて sgcMQ に同梱されています。sgcWebSockets Core のランタイム、 TsgcTCPClient キャリア、TLS レイヤー、JSON ヘルパーです。インストーラーは 1 つで、完全なソースコードが付属します。

プレーン TCP と TLS、それだけ

このパックのすべてのプロトコルは、平文または TLS で包んだ生のソケット上で動作します。MQTT、AMQP、Kafka、STOMP は通常このように配備されます。WebSocket 上でプロトコルを動かす場合、たとえば MQTT over WebSocket や Web-STOMP には WebSocket クライアントが必要で、それは sgcWebSocketsに含まれています。ブローカーがどのトランスポートを公開しているか、選ぶ前にご確認ください。

Delphi と C++ Builder

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 などです。ブローカーの切り替えは、ホスト、ポート、認証情報の変更だけで済みます。

sgcWebSockets の一部

sgcWebSockets の単体パッケージで、単独でライセンスされます。

sgcMQ は基盤となる sgcWebSockets Core のランタイムを同梱しているため、他の eSeGeCe ライセンスは不要です。どのライセンスにも、完全なソースコードと、6 つのターゲットすべてでのロイヤリティフリーでの配布が含まれます。

Single

開発者 1 名のライセンス。同時に 1 台のマシンで使用できます。

€249

Team

開発者 2 名のライセンス。同時に 2 台のマシンで使用できます。

€399

Site

開発者数無制限。社内のすべてのマシンで使用できます。

€649

Delphi と C++ Builder 向けの MQTT、AMQP 0.9.1 / 1.0、Apache Kafka、STOMP クライアントコンポーネントで、sgcWebSockets Core のランタイムを同梱しています。WebSocket トランスポートや .NET も必要ですか? それらは sgcWebSocketsに含まれています。

価格とライセンスを見る
お客様の声

開発者の声

世界中の Delphi、C++ Builder、Lazarus、.NET 開発者から信頼されています。

sgcWebSockets ライブラリはとても便利でセットアップも簡単です。これからも頑張ってください!
Simone Moretti Delphi 開発者
sgcWebSockets は素晴らしく、サポートも最高です!
Christian Meyer 創業者 & CTO
ご支援とサポートに本当に感謝しています。コンポーネントが大好きです。
Mark Steinfeld CTO

Delphi からブローカーと対話しましょう。

MQTT、AMQP、Kafka、STOMP を 1 つのパッケージでネイティブに実装し、sgcWebSockets Core のランタイムを同梱、完全なソースコードも付属します。Windows、Linux、macOS、iOS、Android に同じコードで対応します。

eSeGeCe の製品をもっと

eSeGeCe のその他の製品

sgcMQ は、Delphi、C++ Builder、.NET 向けの他の eSeGeCe コンポーネントライブラリと同じ規約を共有しています。いずれも完全なソースコード付きで、ロイヤリティフリーで配布できます。

sgcWebSockets

Delphi、C++ Builder、Lazarus、.NET 向けの WebSocket、HTTP/2、MQTT、AMQP、WebRTC、AI、そして 30 種類以上の API 統合。WebSocket キャリアはこちらに含まれます。

sgcAuth

Delphi と C++ Builder 向けの OAuth2 クライアント、JWT クライアント、WebAuthn 対応。単体で提供され、sgcWebSockets Core ランタイムが同梱されます。

sgcHTTP

Delphi と C++ Builder 向けの HTTP サーバー、HTTP/2 クライアント、gRPC クライアント、そして Google Cloud の Pub/Sub、Calendar、FCM クライアントです。単体製品で、sgcWebSockets Core ランタイムを同梱しています。

sgcREST

Delphi と C++ Builder 向けの REST サーバー、OpenAPI サーバー、OpenAPI クライアントのコンポーネント。単体で提供され、sgcWebSockets Core ランタイムが同梱されます。

sgcAI

Delphi と C++ Builder 向けの AI、LLM、MCP コンポーネント。1 つのコンポーネントで 7 社の LLM プロバイダーに対応し、MCP、埋め込み、音声も利用できます。単体製品で、sgcWebSockets Core ランタイムを同梱しています。

sgcHTML

Bootstrap 5 と htmx を基盤としたサーバーサイド HTML と UI コンポーネント。sgcMQ が消費するキューの前に、ライブダッシュボードを置けます。

sgcQUIC

生の QUIC トランスポートと、HTTP/3 クライアントおよびサーバー、WebTransport。sgcWebSockets Enterprise のアドオンです。

sgcOpenAPI

OpenAPI 3.x パーサー、ネイティブ Pascal SDK ジェネレーター、OpenAPI サーバーコンポーネント、そして 1,195 以上のビルド済みクラウド SDK。

sgcSign

ドキュメントには XAdES、PAdES、CAdES、ASiC、コードには Authenticode、ClickOnce、NuGet、VSIX。

sgcPDF

PDF ファイルの作成、編集、表示、署名、墨消し、検証を純粋な Object Pascal で提供します。DLL の配布は不要で、単体でライセンスされます。

sgcBiometrics

Delphi と C++ Builder 向けの Windows Hello、指紋センサー、Windows Biometric Framework。

sgcIndy

モダンな TLS、IPv6、HTTP/2 に対応した更新版 Indy TCP/IP コンポーネント。Delphi 7 から 13 まで対応します。

ブログの最新記事

すべての記事を見る →

現在は eSeGeCe の sgcMQ ビューを表示しています。

別の切り口を見る →
30日間返金保証ご満足いただけない場合は、ご購入から30日以内に全額返金をリクエストできます。 返金ポリシーを見る