MQTT Client 组件:sgcMQ | eSeGeCe

MQTT Client

TsgcWSPClient_MQTT 是一个原生的 MQTT 3.1.1 和 MQTT 5.0 客户端。支持 QoS 0、1 和 2 的发布与订阅、保留消息、Last Will and Testament、持久会话,以及 MQTT 5 新增的原因码、用户属性、主题别名、共享订阅和增强身份验证。在 Delphi 和 C++ Builder 中是同一个组件、同一套 API。

TsgcWSPClient_MQTT

把一个 TsgcTCPClient 赋给 Client,用 MQTTVersion 选择协议版本,接好 OnMQTTConnectOnMQTTPublish,然后调用 SubscribePublish

组件类

TsgcWSPClient_MQTT

规范

OASIS MQTT 3.1.1 和 MQTT 5.0

传输

TCP (1883) 或 TLS (8883)

语言

Delphi、C++ Builder

传输:纯 TCP 和 TLS。sgcMQ 通过纯 TCP 和 TLS 连接。如果您需要 MQTT over WebSocket,则需要 sgcWebSockets 包,它提供 WebSocket 客户端。

连接、订阅、发布

TsgcTCPClient 赋到 Client 属性上,MQTT 就直接跑在 TCP 套接字之上。要连接加密的消息代理,请打开 TLS 并把端口指向 8883。

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);
  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);
end;

procedure TForm1.MQTTPublish(Connection: TsgcWSConnection;
  aTopic, aText: string;
  PublishProperties: TsgcWSMQTTPublishProperties);
begin
  Memo1.Lines.Add(aTopic + ' = ' + aText);
end;
// include: sgcTCP_Client_WS.hpp, sgcWebSocket_Protocols.hpp,
// sgcWebSocket_Protocol_MQTT_Client.hpp

TsgcTCPClient *TCPClient = new TsgcTCPClient(this);
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->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);
}

// In the OnMQTTConnect handler:
MQTT->Subscribe("sensors/+/temperature", mtqsAtLeastOnce);
MQTT->Publish("devices/sensor-01/status",
  "online", mtqsAtLeastOnce, true);

关键属性与方法

您最常使用的成员。

载体

Client 接受持有套接字的 TsgcTCPClient。它的 HostPortTLSTLSOptionsWatchDog 决定字节如何传输。

协议版本

MQTTVersion 用于选择 mqtt311mqtt5。只有选择版本 5 时,MQTT 5 的属性和原因码才会出现在线路上。

身份验证

Authentication.EnabledUserNamePassword 填充 CONNECT 数据包。对于 MQTT 5 的质询/响应方案,请配合使用 AuthOnMQTTAuth

发布

Publish(topic, text, qos, retain) 发送一条消息,并提供用于二进制负载的 TStream 重载。PublishAndWait 会阻塞直到消息代理确认该数据包。

订阅

Subscribe(topic, qos) 接受单个过滤器或一个 TsgcWSTopics 列表,UnSubscribe 与之对应。通配符 + 匹配一层,# 匹配其余部分。

投递事件

OnMQTTPublish 送达入站消息。QoS 2 的握手以 OnMQTTPubRecOnMQTTPubRelOnMQTTPubComp 形式暴露,QoS 1 则对应 OnMQTTPubAck

Last Will

LastWillTestament 携带主题、消息、QoS 和 retain 标志;如果连接在没有正常 DISCONNECT 的情况下断开,消息代理会代您发布它们。

会话与存活检测

ConnectProperties 设置 MQTT 5 的会话过期时间和各项上限。HeartBeat 驱动保活 PINGREQ,收到响应时触发 OnMQTTPing

QoS 存储

QoS 属性控制在确认尚未返回期间,出站的 QoS 1 和 2 消息如何存储和重试。

继续探索

在线帮助完整的 API 参考和使用指南。
所有 sgcMQ 组件浏览全部七个组件的完整功能矩阵。
下载免费试用版用该客户端对接 Mosquitto、HiveMQ 或您自己的消息代理。
价格Single、Team 和 Site 授权,均含完整源代码。
超值之选:All-AccesseSeGeCe 全部产品,含高级支持,每年 €1,059 起。
查看 All-Access 价格

准备好开始了吗?

下载免费试用版,从 Delphi 或 C++ Builder 发布您的第一条 MQTT 消息。