MQTT 限制和局限性

在将 MQTT 与 Platform Service 一起使用时,存在以下限制和局限性。

保留消息

Platform Service 提供了对 MQTT 消息传递的保留消息功能的有限支持。如果从设备、网关或应用程序发送到 Platform Service 的 MQTT 消息中保留消息标志设置为 true,那么会将该消息作为非保留消息进行处理。Platform Service 组织无权发布保留消息。Platform Service 服务将覆盖已设置为 true 的保留消息标志,并将消息当作保留消息标志设置为 false 进行处理。

预订缓冲区

将为来自设备或应用程序的每个预订分配一个可容纳 5000 条消息的缓冲区。使用缓冲区,任何应用程序或设备可滞后于其正在处理的实时数据,还可为每个预订积压最多 5000 条暂挂消息。缓冲区已满时,会在收到新消息时废弃最旧消息。

对于 MQTT V5.0,请使用 MQTT clean start 和 session expiry 选项来访问预订缓冲区。当 clean start 设置为 false 并且 session expiry 设置为非零值时,订户将从缓冲区接收消息。当 clean start 设置为 true 并且 session expiry 设置为 0 时,将重置缓冲区。

对于 MQTT V3.1.1 或 3.1,请使用 MQTT clean session 选项访问预订缓冲区。当干净会话设置为 false 时,订户会收到来自缓冲区的消息。当干净会话设置为 true 时,会重置缓冲区。

:无论使用何种服务质量设置,预订缓冲区限制都适用。如果应用程序无法与其预订的消息速率保持同步,以级别 1 或 2 发送的消息有可能无法传递到该应用程序。

消息有效内容

Platform Service 支持发送和接收受 MQTT 标准支持的任何格式的消息。MQTT 独立于数据,因此无法发送图像、任何编码的文本、加密数据以及几乎每种类型的二进制格式数据。但是,对于特定用例,存在一些限制。

最大消息有效内容大小

对于 Platform Service 上的消息有效内容,存在一些大小限制。

要点:Platform Service 上的最大有效内容大小为 131072 字节。将拒绝其有效内容超出限制的消息。正在连接的客户机也会断开连接,并且会在诊断日志中显示一条消息,如以下设备消息示例中所示:

Closed connection from x.x.x.x. The message size is too large for this endpoint.

MQTT 保持活动的时间间隔

MQTT 保持活动的时间间隔(以秒为单位)定义客户机和代理程序之间最长可以多长时间不通信。MQTT 客户机必须确保在与代理程序没有任何其他通信时,要发送 PINGREQ 包。利用保持活动的时间间隔,无需等到 TCP/IP 超时,客户机和代理程序就都可以检测出导致连接中断的网络故障。

如果 Platform Service MQTT 客户机使用共享的预订,那么仅能将保持活动的时间间隔设置为 1 到 3600 秒之间的值。如果请求的值为 0 或者大于 3600,那么 Platform Service 代理程序会将保持活动的时间间隔设置为 3600 秒。