TsgcWSPClient_MQTT › 方法 › PublishAndWait
发布消息并阻塞,直到代理确认或超时。
function PublishAndWait(const aTopic, aText: String; aQoS: TmqttQoS = mtqsAtMostOnce; aRetain: Boolean = False; const aPublishProperties: TsgcWSMQTTPublish_Properties = nil; const aTimeout: Integer = 10000): Boolean;
| 名称 | 类型 | 描述 |
|---|---|---|
aTopic | const String | PUBLISH 数据包的目标主题名称。 |
aText | const String | 消息的 UTF-8 负载。 |
aQoS | TmqttQoS | 投递保证。只有 QoS 1 和 QoS 2 会产生 broker 确认,因此 QoS 0 在写入数据包后立即返回 True。 |
aRetain | Boolean | 转发给 broker 的保留标志。 |
aPublishProperties | const TsgcWSMQTTPublish_Properties | 可选的 MQTT 5.0 发布属性。不需要时传入 nil。 |
aTimeout | const Integer | 等待匹配 PUBACK(QoS 1)或 PUBCOMP(QoS 2)的最长时间(毫秒)。默认值为 10000。 |
当 broker 在超时前确认消息时为 True;等待超时或会话断开时为 False。(Boolean)
同步文本重载。适用于请求/响应工作流和启动脚本,调用方需要确认消息已到达代理后再继续执行。不能从组件自身的事件回调中调用,因为这些回调已在传输线程上序列化执行,调用会导致死锁。
if not MQTT.PublishAndWait('alerts/critical', '{"code":500}', mtqsAtLeastOnce, False, nil, 5000) then
raise Exception.Create('broker did not acknowledge alert');
function PublishAndWait(const aTopic: String; const aStream: TStream; aQoS: TmqttQoS = mtqsAtMostOnce; aRetain: Boolean = False; const aPublishProperties: TsgcWSMQTTPublish_Properties = nil; const aTimeout: Integer = 10000): Boolean;
| 名称 | 类型 | 描述 |
|---|---|---|
aTopic | const String | 二进制 PUBLISH 数据包的目标主题名称。 |
aStream | const TStream | 提供作为负载发送的原始字节的流。在传输前完整读取。 |
aQoS | TmqttQoS | 应用于 PUBLISH 数据包的投递保证。 |
aRetain | Boolean | 转发给 broker 的保留标志。 |
aPublishProperties | const TsgcWSMQTTPublish_Properties | 可选的 MQTT 5.0 属性,通常用于为二进制负载设置 Content Type。 |
aTimeout | const Integer | 等待 QoS 1/2 确认的最大毫秒数。默认为 10000。 |
确认时返回 True,超时或断开连接时返回 False。(Boolean)
同步二进制重载,适用于调用代码必须确认每个块已被代理存储的文件上传流程。避免从事件处理程序中调用它,并在通过慢速网络发送大负载时使用合理的超时值。
oStream := TMemoryStream.Create;
try
oStream.LoadFromFile('config.bin');
if not MQTT.PublishAndWait('devices/123/config', oStream, mtqsExactlyOnce, True, nil, 30000) then
ShowMessage('config upload failed');
finally
oStream.Free;
end;