sgcMQ: Delphi、C++ Builder 向け MQTT、AMQP、Kafka、STOMP クライアント
単体で完結する製品 Windows、Linux、macOS、iOS、Android

sgcMQ: Delphi、C++ Builder 向け MQTT、AMQP、Kafka、STOMP クライアント

7 つのクライアントコンポーネントが、MQTT 3.1.1 と 5.0、AMQP 0.9.1、AMQP 1.0、Apache Kafka のワイヤプロトコル、STOMP 1.0 から 1.2 までを扱います。RabbitMQ と ActiveMQ 向けにはブローカー固有の STOMP クライアントも用意しています。どのワイヤ形式もライブラリ内の Object Pascal で解析・生成するため、外部のクライアントライブラリも、DLL も、ラッパーも配布する必要がありません。sgcMQ は単体で完結しており、土台となる sgcWebSockets Core ランタイムを同梱しているため、購入すべき基本ライセンスはありません。

基本ライセンスは不要
完全なソースコード
6 つのターゲットを 1 つのコードベースで
1 つのキャリア TsgcTCPClient 素の TCP または TLS。どのプロトコルでも同じソケットです
MQTT TsgcWSPClient_MQTT
AMQP 0.9.1 TsgcWSPClient_AMQP
AMQP 1.0 TsgcWSPClient_AMQP1
Kafka TsgcWSPClient_Kafka
STOMP TsgcWSPClient_STOMP
RabbitMQ 用 STOMP TsgcWSPClient_STOMP_RabbitMQ
ActiveMQ 用 STOMP TsgcWSPClient_STOMP_ActiveMQ
7 クライアントコンポーネント コンポーネントパレットの 1 ページに集約
5 プロトコルファミリー MQTT、AMQP 0.9.1、AMQP 1.0、Kafka、STOMP
6 対応プラットフォーム Win32、Win64、Linux64、macOS、iOS、Android
0 外部ライブラリ librdkafka も Paho も Qpid も DLL も不要
1 トランスポートキャリア 1 つの TsgcTCPClient がすべてをまかないます

最初に知っておきたい 2 点

sgcMQ に必要なもの、そしてバイト列がブローカーに届く仕組みです。どちらも答えは短くまとまります。

★ 基本ライセンスは不要

sgcMQ は単体で完結しています

基本製品の上に乗る形ではありません。コンポーネントが必要とするものはすべて sgcMQ に同梱されています。sgcWebSockets Core ランタイム、TCP キャリア TsgcTCPClient、TLS レイヤー、JSON ヘルパーです。SKU も 1 つ、インストーラーも 1 つで、他に購入するものはありません。

すべてのライセンスに完全なソースコードが付属するため、プロトコルの実装はバイナリの中に消えることなく、自分のデバッガでステップ実行できます。

トランスポートの範囲

sgcMQ は素の TCP と TLS です

このパックのどのプロトコルも、素のまま、あるいは TLS でラップした生ソケット上で動作します。これはブローカーのネイティブポートを利用する形であり、MQTT、AMQP、Kafka、STOMP の通常の運用方法です。パッケージに含まれるもの以外は何も必要ありません。

MQTT over WebSocket や Web-STOMP のように、プロトコルを WebSocket 上で動かす場合は WebSocket クライアントが必要です。これは sgcMQ ではなく sgcWebSockets に付属します。選択の前に、ブローカーがどのトランスポートを公開しているかをご確認ください。

7 つのクライアント、5 つのプロトコルファミリー

いずれもフォームに配置するか、コードで生成する非ビジュアルコンポーネントです。Client プロパティでキャリアを接続し、プロトコルのイベントを接続してから、そのプロトコル固有のメソッドを呼び出します。命名は 7 つすべてで一貫しているため、1 つ覚えれば残りもほぼ理解できます。

MQTT1 コンポーネント

パブリッシュ、サブスクライブ、そして QoS の仕組み一式

TsgcWSPClient_MQTT は、MQTTVersion という 1 つのプロパティで MQTT 3.1.1 と MQTT 5.0 の両方をカバーします。QoS 0、1、2 に対応し、PUBACK、PUBREC、PUBREL、PUBCOMP のやり取りは隠さずイベントとして公開されます。保持メッセージ、Last Will and Testament、ワイルドカードのサブスクリプション、再開可能なセッションも利用できます。バージョン 5 では、理由コード、ユーザープロパティ、トピックエイリアス、共有サブスクリプション、チャレンジ/レスポンス方式のための AUTH の往復が加わります。

TsgcWSPClient_MQTT MQTT 3.1.1 · MQTT 5.0
AMQP2 コンポーネント

名前以外に共通点のない 2 つのプロトコル

TsgcWSPClient_AMQP は、RabbitMQ が前提とするプロトコルである AMQP 0.9.1 を扱います。チャネル、エクスチェンジとキューの宣言、バインディング、コンシューマー、パブリッシャーの確認応答、プリフェッチ QoS、トランザクションに対応します。TsgcWSPClient_AMQP1 は、Azure Service Bus と Event Hubs の基盤である OASIS および ISO/IEC 19464 標準の AMQP 1.0 を扱います。コンテナ、セッション、送信リンクと受信リンク、クレジットベースのフロー制御、SASL、Claims-Based Security のトークンヘルパーに対応します。ワイヤ形式もオブジェクトモデルも異なるため、sgcMQ は 1 つの API で両方をまかなうふりをせず、それぞれに専用のコンポーネントを提供しています。

Apache Kafka1 コンポーネント

バイナリプロトコルで直接通信

TsgcWSPClient_Kafka は、v2 レコードバッチ形式を含む Kafka のワイヤプロトコルを TCP 上で扱います。前段の REST プロキシも、下層の librdkafka もありません。acks レベルと gzip 圧縮を指定して単一レコードやバッチをプロデュースでき、コーディネーターの検出、参加、同期、ハートビート、リバランスが自動処理されるグループ経由でコンシュームすることも、オフセットを指定してパーティションを直接読み取ることもできます。オフセットのコミット、トピックの作成と削除、グループの一覧取得、ブローカーの対応状況の確認も、いずれも標準のメソッドとして用意されています。

TsgcWSPClient_Kafka プロデューサー · コンシューマーグループ · 管理操作
STOMP3 コンポーネント

汎用クライアント 1 つと、ブローカー方言 2 つ

TsgcWSPClient_STOMP は STOMP 1.0、1.1、1.2 を扱います。SEND、SUBSCRIBE、UNSUBSCRIBE、ACK、NACK、レシート、双方向のハートビート、BEGIN、COMMIT、ABORT のトランザクションフレームに対応し、受け入れるバージョンは Versions で告知します。2 つの派生コンポーネントは、ブローカーのデスティネーション規約を名前付きメソッドに変換します。RabbitMQ 向けには /queue/topic/exchange/amq/queue/temp-queue のヘルパーが、ActiveMQ 向けにはキューとトピックのヘルパーに加え、ブローカー独自のヘッダー用の ActiveMQ_Options プロパティが用意されています。

公開仕様に準拠。ブローカーは自由に選べます

sgcMQ はベンダー SDK をラップするのではなく仕様そのものを実装しているため、これらのプロトコルを通信で話すものはすべて候補になります。同じコンポーネントが、自社ホストのブローカーでもマネージドのクラウドサービスでも、コードを変更せずに動作します。ブローカーの切り替えは、ホスト名、ポート、認証情報を差し替えるだけです。

RabbitMQ TsgcWSPClient_AMQP

AMQP 0.9.1 にネイティブ対応。STOMP と MQTT のプラグインにも、それぞれ専用のコンポーネントで接続できます。

Apache Kafka TsgcWSPClient_Kafka

ポート 9092 上のブローカー独自のバイナリプロトコル。Kafka 互換のワイヤプロトコルを持つブローカーにも対応します。

Eclipse Mosquitto TsgcWSPClient_MQTT

軽量な MQTT ブローカーの定番。素の接続はポート 1883、TLS はポート 8883 です。

HiveMQ TsgcWSPClient_MQTT

共有サブスクリプションやユーザープロパティを含む MQTT 5.0 に完全対応。

EMQX TsgcWSPClient_MQTT

MQTT 3.1.1 と 5.0。自社ホストでも、ベンダーのクラウドでも利用できます。

Apache ActiveMQ TsgcWSPClient_STOMP_ActiveMQ

ポート 61613 の STOMP、または AMQP 1.0 コンポーネントで Artemis に対する AMQP 1.0 接続。

Azure Service Bus TsgcWSPClient_AMQP1

Claims-Based Security ヘルパーを備えた AMQP 1.0。同じコンポーネントで Event Hubs にも接続できます。

AWS IoT Core TsgcWSPClient_MQTT

クライアント証明書を使った TLS 上の MQTT。設定はキャリアの TLSOptions で行います。

すべてのプロトコルの下に、1 つのキャリア

プロトコルコンポーネントの Client プロパティに TsgcTCPClient を割り当てると、フレームがそのままソケットに流れます。暗号化、プロキシ越え、IPv6、再接続はいずれもキャリア側の設定なので、一度設定すれば、その上のプロトコルが MQTT でも AMQP でも Kafka でも STOMP でも同じように動作します。

MQTT 3.1.1 と 5.0 TsgcWSPClient_MQTT
TCP1883MQTT の既定のリスナーです。
TLS8883キャリア側で TLS を有効にします。
AMQP 0.9.1 TsgcWSPClient_AMQP
TCP5672RabbitMQ の既定のリスナーです。
TLS5671amqps のリスナーです。
AMQP 1.0 TsgcWSPClient_AMQP1
TCP5672ポート番号は同じですが、プロトコルは異なります。
TLS5671Azure Service Bus が想定するポートです。
Apache Kafka TsgcWSPClient_Kafka
TCP9092平文のリスナーです。
TLS9093ブローカー側の SSL リスナーとして設定されているポートです。
STOMP、RabbitMQ プラグイン TsgcWSPClient_STOMP_RabbitMQ
TCP61613ネイティブの STOMP ポートです。
TLS61614プラグインの暗号化リスナーです。
STOMP、ActiveMQ TsgcWSPClient_STOMP_ActiveMQ
TCP61613ネイティブの STOMP コネクターです。
TLS61612ブローカーの stomp+ssl コネクターです。

汎用の TsgcWSPClient_STOMP も、STOMP に対応した任意のブローカーに対して 61613 を使います。これらは慣例的な既定値であり、キャリアの Port には実際の運用環境が待ち受けているポートを指定してください。

TLS は好みの方式で

TLSOptions.IOHandler では、マルチプラットフォームのビルド向けに OpenSSL を選ぶか、OpenSSL のバイナリをまったく配布したくない場合に Windows の SChannel を選べます。相互 TLS では、PEM ファイル、PKCS#12 バンドル、Windows の証明書ストアからクライアント証明書を読み込めます。

再接続とキープアライブ

キャリアの WatchDog が、設定可能な間隔と試行回数でリンク切断後に再接続します。さらに各プロトコルが独自の死活監視を備えています。MQTT のキープアライブ ping、AMQP のハートビート、STOMP のハートビート、Kafka のコンシューマーグループのハートビートです。

プロキシと IPv6

HTTP CONNECT プロキシへの対応はキャリア側にあるため、社内プロキシの背後にあるブローカーにも到達できます。IPv6 のブローカーアドレスも追加設定なしで利用できます。

ポーリングループではなくイベント

読み取りは専用スレッドで動作し、受信フレームは型付きイベントとして届きます。OnMQTTPublishOnAMQPBasicDeliverOnKafkaMessageOnSTOMPMessage です。VCL や FMX のコードでは、キャリアの通知設定でこれらをメインスレッドにマーシャリングしてください。

MQTT でサブスクライブとパブリッシュ

TsgcTCPClient をプロトコルコンポーネントと組み合わせ、認証情報を設定し、イベントを接続してから、プロトコルのメソッドを呼び出します。Object Pascal でも C++ Builder でも同じ形で、他の 6 コンポーネントでも同じ形です。

uses
  sgcTCP_Client_WS, sgcWebSocket_Classes, sgcWebSocket_Types,
  sgcWebSocket_Protocols, sgcWebSocket_Protocol_MQTT_Client,
  sgcWebSocket_Protocol_MQTT_Message;

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);
  MQTT.Publish('devices/sensor-01/status',
    'online', mtqsAtLeastOnce, True);   // retained
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;
// include: sgcTCP_Client_WS.hpp, sgcWebSocket_Protocols.hpp,
// sgcWebSocket_Protocol_MQTT_Client.hpp,
// sgcWebSocket_Protocol_MQTT_Message.hpp

TsgcTCPClient *TCPClient = new TsgcTCPClient(this);   // plain MQTT over TCP
TCPClient->Host = "broker.example.com";
TCPClient->Port = 1883;
TCPClient->WatchDog->Enabled = true;

TsgcWSPClient_MQTT *MQTT = new TsgcWSPClient_MQTT(this);
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;

void __fastcall TForm1::MQTTPublish(TsgcWSConnection *Connection,
    UnicodeString aTopic, UnicodeString aText,
    TsgcWSMQTTPublishProperties PublishProperties)
{
  Memo1->Lines->Add(aTopic + " = " + aText);
}

MQTT->Subscribe("sensors/+/temperature", mtqsAtLeastOnce);
MQTT->Publish("sensors/room1/temperature",
  "{\"value\":22.5,\"unit\":\"C\"}", mtqsAtLeastOnce, true);

// For an encrypted broker: same code, TLS on the carrier.
TCPClient->Port = 8883;
TCPClient->TLS  = true;

6 つのターゲット、注釈なし

このメッセージングパックにプラットフォームの制限はありません。7 つのクライアントと、その下のキャリアは、コンパイラが生成できるすべてのターゲットに登録されています。Windows のサービスから Android 端末まで、1 つのソースツリーから構築できます。

プロトコルクライアント 7 種すべて MQTT、AMQP 0.9.1、AMQP 1.0、Kafka、そして 3 つの STOMP クライアント
Windows Win32 Windows Win64 Linux64 macOS iOS Android
The TsgcTCPClient carrier ソケット、TLS、プロキシ、IPv6、WatchDog による再接続
Windows Win32 Windows Win64 Linux64 macOS iOS Android
TLS エンジン TLSOptions.IOHandler で選択します
OpenSSL、全ターゲット対応 SChannel、Windows のみ
IDE 対応 ソースツリーは 1 つで、設計時パッケージはバージョンごとに用意されています
Delphi 7 から 13 C++ Builder
WebSocket キャリア MQTT over WebSocket、Web-STOMP など
sgcMQ には含まれません sgcWebSockets のパッケージが必要です

機能一覧ページで規格とプラットフォームの詳細表を見る →

単体で完結するパッケージ

sgcMQ は単体でライセンスされ、開発者 1 名向けの €249 から始められます。すべてのライセンスに、完全なソースコード、1 年間のアップデート、更新時 50% から 70% の割引が含まれます。パック 1 つの更新で 50%、2 つで 60%、3 つ以上で 70% になります。sgcAI と sgcMQ はそれぞれ 1 パックとして数えます。

sgcMQ

€249

Single、Team、Site の各ライセンスをご用意しています。

  • MQTT 3.1.1 / 5.0 クライアント
  • AMQP 0.9.1 / AMQP 1.0 クライアント
  • Apache Kafka クライアント
  • STOMP、RabbitMQ、ActiveMQ クライアント
  • sgcWebSockets Core ランタイムを同梱
  • Delphi および C++ Builder、6 ターゲットすべて
  • 完全なソースコード
  • 1 年間のアップデート
★ 基本ライセンスは不要

sgcMQ には sgcWebSockets Core ランタイムが含まれるため、他に購入するものはありません。

購入手続きには 2 つの項目が表示されます。金額 0 で計上される sgcWebSockets Core ランタイムの利用権と、sgcMQ パック本体です。価格の詳細はこちら

3,000+Developers
20+Years
761+Components
30+API Integrations
5Platforms
30日間返金保証ご満足いただけない場合は、ご購入から30日以内に全額返金をリクエストできます。 返金ポリシーを見る

Delphi からブローカーと通信する

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

eSeGeCe のその他の製品

sgcMQ と、Delphi、C++ Builder、.NET 向けの他のコンポーネントライブラリを組み合わせてご利用いただけます。

sgcWebSockets

フルライブラリです。WebSocket のクライアントとサーバー、HTTP/2、IoT、P2P、AI の各コンポーネントを収録しています。WebSocket キャリアはこちらに含まれます。

詳しく見る →

sgcQUIC

OpenSSL 3.5 のネイティブ QUIC エンジン上に構築された、QUIC(RFC 9000)および HTTP/3(RFC 9114)のクライアント・サーバーコンポーネントです。

詳しく見る →

sgcAI

AI、LLM、MCP のコンポーネントです。1 つのチャットコンポーネントで OpenAI、Anthropic、Gemini、DeepSeek、Ollama、Grok、Mistral に接続できます。

詳しく見る →

sgcHTML

Bootstrap 5 と htmx に対応した、Delphi、C++ Builder、.NET 向けのデータ連携サーバーサイド HTML/UI コンポーネントです。

詳しく見る →

sgcSign

エンタープライズ向けの電子署名。XAdES、PAdES、CAdES、ASiC に対応し、10 種類の鍵プロバイダーと EU 21 か国のプロファイルを備えています。

詳しく見る →

sgcOpenAPI

OpenAPI 3.0 のパーサーと SDK ジェネレーター。任意の OpenAPI 仕様を、数秒で厳密に型付けされた Delphi クライアントに変換します。

詳しく見る →