Delphi MQTT クライアント — あらゆる MQTT 3.1 / 5.0 ブローカーに接続
Delphi と C++Builder 向けのネイティブ MQTT 3.1.1 および MQTT 5.0 クライアントコンポーネント。発行、購読、retained メッセージ、last will、QoS 0/1/2、TLS、共有購読、完全な MQTT 5 プロパティ面 — HiveMQ、Mosquitto、EMQX、AWS IoT Core、Azure IoT Hub に対して検証済み。
Delphi と C++Builder 向けのネイティブ MQTT 3.1.1 および MQTT 5.0 クライアントコンポーネント。発行、購読、retained メッセージ、last will、QoS 0/1/2、TLS、共有購読、完全な MQTT 5 プロパティ面 — HiveMQ、Mosquitto、EMQX、AWS IoT Core、Azure IoT Hub に対して検証済み。
MQTT は IoT、テレメトリ、モバイルプッシュ、コネクテッドビークルのデファクトメッセージングプロトコルです。フレーミングのバイトを 1 つも書かずに Delphi コードベースにそれをもたらしてください。
Delphi MQTT クライアントにより、VCL または FMX アプリケーションが OASIS MQTT プロトコル — 制約あるデバイスと低帯域・高レイテンシのネットワーク向けに設計された軽量 publish/subscribe プロトコル — を話せるようになります。sgcWebSockets では、Delphi 7 から Delphi 13 まで、すべての Embarcadero ターゲットプラットフォーム(Win32、Win64、Linux64、macOS、iOS、Android)で動作する単一の非可視コンポーネント TsgcWSPClient_MQTT として、完全なクライアント面を入手できます。
コンポーネントは同じコードパスで主要な MQTT バージョンを両方実装します: 長らくデプロイされている MQTT 3.1.1(OASIS 標準、2014 年以来ほぼすべての IoT ブローカーで使用)と、モダンな MQTT 5.0(トピックエイリアス、セッション期限、ユーザープロパティ、強化された認証、リクエスト/レスポンス、共有購読を備える)。単一のプロパティ — Version — がそれらを切り替えます。
TsgcWSPClient_MQTT
ネイティブ TCP(1883 / 8883)、WebSocket(80 / 443)、OpenSSL または SChannel 経由の TLS
MQTT 3.1.1 と MQTT 5.0
Windows、macOS、Linux、iOS、Android、.NET
仕様準拠クライアントは原則としてブローカー非依存ですが — 実世界のブローカーには癖があります。各リリースを顧客が実際にデプロイするブローカーに対してテストします。
完全な MQTT 5 プロパティ面、共有購読、強化された認証、HiveMQ Cluster。無料の Cloud ティアは、コンポーネントをエンド・ツー・エンドで試す最も簡単な方法です。
リファレンスオープンソースブローカー。docker run -p 1883:1883 eclipse-mosquitto でローカル実行し、30 秒で開発ターゲットが用意できます。
ルールエンジン、Kafka ブリッジ、共有購読を備えた、巨大スケールの Erlang ブローカー。数百万接続で本番運用可能。
X.509 クライアント証明書、443 上の ALPN ネゴシエート MQTT、SigV4 署名済み WebSocket、AWS IoT ブローカークォータ。専用の AWS IoT Core ページを参照。
デバイス SAS トークン、ツイン/ダイレクトメソッドトピック、DPS プロビジョニング。専用の Azure IoT Hub ページを参照。
ポート 8883 での JWT ベースのデバイス認証。コンポーネントは自動的に JWT を生成・ローテーションします。
ポート 15675 上の RabbitMQ Web-MQTT プラグイン — 単一の TLS ポート上でブラウザと Delphi クライアントに対する同じブローカー。
すべて統合テストスイートをパス。AMQP / STOMP / JMS とのマルチプロトコル共存が無料。
あらゆるワイヤーレベルの MQTT 機能がプロパティ、メソッド、イベントとして公開されます — 隠されたものは何もありません。
Fire-and-forget(QoS 0)、PUBACK 付きの at-least-once(QoS 1)、4-way ハンドシェイク PUBREC → PUBREL → PUBCOMP(QoS 2)の exactly-once。Publish() 呼び出しごとに選択。
発行を retained としてマークすると、ブローカーは将来の購読者に最後の既知の値を配信します — 「現在の状態」トピックの標準パターン。
LastWillTestament は、クライアントが優雅でなく切断した場合にブローカーが発行するトピック + ペイロードを登録します — 標準のデバイスオフラインシグナル。
CleanSession が false の場合、購読と未配信の QoS 1/2 メッセージが再接続をまたいで永続化されます — 断続的な接続性をデータを失わずにブリッジ。
OpenSSL または SChannel での 8883 上 MQTTS。ディスク、Windows 証明書ストア、PKCS#12 バンドル、ハードウェアトークンから証明書を読み込み。
コンポーネントを TsgcWebSocketClient にプラグして、ポート 443 上の WSS 経由で MQTT を実行 — あらゆる HTTP 対応ロードバランサーや企業プロキシを通過。
セッション期限、receive maximum、maximum packet size、トピックエイリアス最大、ユーザープロパティ、レスポンス情報 — すべての CONNECT / PUBLISH / SUBSCRIBE / DISCONNECT で。
$share/<group>/<topic> がワーカーのプールに受信メッセージをラウンドロビンします — 無料の水平スケールアウト。
指数バックオフでの自動再接続。購読とキューに入った QoS 1/2 発行は再開時にリプレイされます。
コンポーネントをドロップし、2 つのイベントを結線し、Active を設定。
uses
sgcWebSocket, sgcWebSocket_Protocol_MQTT_Client,
sgcWebSocket_Protocol_MQTT_Message;
var
WSClient: TsgcWebSocketClient;
MQTT: TsgcWSPClient_MQTT;
begin
WSClient := TsgcWebSocketClient.Create(nil);
WSClient.Host := 'broker.hivemq.com';
WSClient.Port := 1883;
WSClient.WatchDog.Enabled := True;
MQTT := TsgcWSPClient_MQTT.Create(nil);
MQTT.Client := WSClient;
MQTT.Version := mqtt50;
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;
WSClient.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);
// Retained “online” message
MQTT.Publish('devices/sensor-01/status',
'online', mtqsAtLeastOnce, True);
end;
procedure TForm1.MQTTPublish(Connection: TsgcWSConnection;
aTopic, aText: string;
PublishProperties: TsgcWSMQTTPublishProperties);
begin
Memo1.Lines.Add(aTopic + ' = ' + aText);
end;
4 つすべてのブローカー認証パターンが標準でサポートされます: シンプルなユーザー名/パスワード(CONNECT パケット内で送信)、X.509 クライアント証明書(mTLS)、JWT(Google Cloud IoT、カスタムブローカー)、SAS トークン(Azure IoT Hub)。MQTT 5 強化認証は、SCRAM スタイルのチャレンジ/レスポンスフロー向けに OnMQTTAuth 経由で AUTH パケットを公開します。
トランスポートでは、ネイティブ MQTT-over-TCP を標準の 1883(平文)または 8883(TLS)ポートで実行するか、MQTT を WebSocket(Client プロパティは任意の TsgcWebSocketClient を受け付け)でトンネルして、厳格な HTTP 専用ファイアウォールや CDN エッジを越えてください。両オプションとも同じコンポーネントと同じイベントを使用します。
TsgcWSPClient_MQTT の完全リファレンス — プロパティ、メソッド、イベント、すべてのサブプロトコル機能。
AWS IoT Core、Azure IoT Hub、Google Cloud IoT の専用ページ。
WebSocket、SSE、AMQP、HTTP/2 push よりも MQTT をいつ選ぶか。
非同期 RPC のための MQTT 5 ResponseTopic + CorrelationData の使用。
AWS IoT Core に対する署名済み WebSocket 認証。
AWS IoT カスタムオーソライザー経由のトークンベース認証。