如果发布 QoS1 o 2 消息并且没有收到来自客户端的适当确认,有谁知道 Watson IoT 代理会做什么?它是否实现了超时(比如 20 秒左右)然后再次重新发送消息?似乎有些代理会这样做,而其他代理只在新连接上重新发送消息(当然如果保留设置为 1)。MQTT 规范在这一点上有点模糊。
1 回答
对于尚未确认的客户端,该消息将被视为正在进行中,并且该消息仅在该客户端断开连接并重新连接时才会发生(但前提是客户端是干净的会话 = 0)
对于 QoS1 和 2:至少一次 (QoS1)
对于服务质量级别 1 (QoS1),消息始终至少传递一次。如果在发送方收到确认之前发生故障,则可以多次传递消息。消息必须本地存储在发送方,直到发送方收到消息已由接收方发布的确认。消息被存储以防必须再次发送消息。
恰好一次 (QoS2)
“恰好一次”服务质量级别 2 (QoS2) 是最安全但最慢的传输模式。消息总是只传递一次,并且还必须在发送方本地存储,直到发送方收到消息已由接收方发布的确认。消息被存储以防必须再次发送消息。对于 2 级服务质量,使用比 1 级更复杂的握手和确认序列,以确保消息不重复
MQTT 保活间隔
MQTT 保持活动间隔(以秒为单位)定义了客户端和代理之间没有通信时可以通过的最长时间。MQTT 客户端必须确保在没有与代理进行任何其他通信的情况下发送 PINGREQ 数据包。保持活动间隔允许客户端和代理都检测到网络失败,从而导致连接断开,而无需等待达到 TCP/IP 超时期限。
如果您的 Watson IoT Platform MQTT 客户端使用共享订阅,则保持活动间隔值只能设置为 1 到 3600 秒之间。如果请求值 0 或大于 3600 的值,Watson IoT Platform 代理将保持活动间隔设置为 3600 秒。
保留的消息
Watson IoT Platform 对 MQTT 消息传递的保留消息功能提供有限支持。如果在从设备、网关或应用程序发送到 Watson IoT Platform 的 MQTT 消息中将保留消息标志设置为 true,则该消息将作为未保留消息处理。Watson IoT Platform 组织无权发布保留的消息。当保留消息标志设置为 true 时,Watson IoT Platform 服务会覆盖保留消息标志,并处理消息,就像将保留消息标志设置为 false 一样。