TsgcWSPClient_MQTT方法 › Publish

Publish 方法

使用请求的 QoS 和保留标志将消息发布到主题。

重载

重载 1

语法

function Publish(const aTopic, aText: String; aQoS: TmqttQoS = mtqsAtMostOnce; aRetain: Boolean = False; const aPublishProperties: TsgcWSMQTTPublish_Properties = nil) : Word;

参数

名称类型描述
aTopicconst String消息发布到的完整主题名称(不含通配符)。
aTextconst String以 UTF-8 编码的载荷作为 PUBLISH 包正文发送。
aQoSTmqttQoS投递保证:mtqsAtMostOnce (0)、mtqsAtLeastOnce (1) 或 mtqsExactlyOnce (2)。默认为 mtqsAtMostOnce。
aRetainBoolean当为 True 时,代理将该消息存储为主题的保留值,并转发给新订阅者。
aPublishPropertiesconst TsgcWSMQTTPublish_Properties可选的 MQTT 5.0 属性(Content Type、Response Topic、Message Expiry、User Properties)。传入 nil 可省略。

返回值

分配给 PUBLISH 数据包的数据包标识符;QoS 1 和 2 时非零,QoS 0 时为零。可用于与 OnMQTTPubAck、OnMQTTPubRec 和 OnMQTTPubComp 进行关联。(Word

备注

文本重载,适用于 JSON 文档和其他 UTF-8 内容。调用在数据包交付给传输层后立即返回;QoS 1/2 确认异步投递。需要通过 Connect 建立活跃的 MQTT 会话。

示例

MQTT.Publish('sensors/temp', '{"value":22.5}', mtqsAtLeastOnce, True);

重载 2

语法

function Publish(const aTopic: String; const aStream: TStream; aQoS: TmqttQoS = mtqsAtMostOnce; aRetain: Boolean = False; const aPublishProperties: TsgcWSMQTTPublish_Properties = nil) : Word;

参数

名称类型描述
aTopicconst String二进制有效负载发布到的完全限定主题名称。
aStreamconst TStream源流,其完整内容将作为 PUBLISH 有效负载原样发送。位置由组件保存并恢复。
aQoSTmqttQoS投递保证:mtqsAtMostOnce (0)、mtqsAtLeastOnce (1) 或 mtqsExactlyOnce (2)。默认为 mtqsAtMostOnce。
aRetainBoolean为 True 时,broker 将负载存储为该主题的保留值。
aPublishPropertiesconst TsgcWSMQTTPublish_Properties可选的 MQTT 5.0 属性,通常用于在发送二进制数据时设置 Content Type(例如 image/png)。

返回值

PUBLISH 数据包的数据包标识符;QoS 0 时为零。启用与确认事件的关联。(Word

备注

用于文件、protobuf 帧、图像和其他非文本有效负载的二进制重载。流在序列化之前会被完整读取,因此非常大的有效负载应在应用层分块以避免大量内存分配。QoS、Retain 和属性的行为与文本重载相同。

示例

oStream := TFileStream.Create('firmware.bin', fmOpenRead or fmShareDenyWrite);
try
  MQTT.Publish('devices/123/firmware', oStream, mtqsExactlyOnce);
finally
  oStream.Free;
end;

返回方法