在 MQTT 会话中始终使用 QoS 0 有什么问题?

What's the problem of always using QoS 0 in a MQTT session?

我一直在使用 Paho C 库在资源严格受限的嵌入式设备上开发始终连接的 MQTT 客户端。这是我的问题:

  1. 除了代理和客户端崩溃,QoS 0 消息没有到达目的地还有其他原因吗?

  2. 在订阅请求中,是否可能代理不接受请求的 QoS?

  3. 什么情况下QoS 1消息会被多次接收?

(1) 通过 TCP/IP 以 QOS0 传递的消息只能保证到达远程机器的 TCP 堆栈,而不是 运行 的实际应用程序(是 MQTT 客户端或 MQTT 代理) ).

以更高 QOS 发送的消息被应用程序确认,而不仅仅是主机的 TCP/IP 堆栈,这意味着您可以更加确定它确实已被处理。

(2) 某些代理可能仅支持 QOS 0 或 QOS 0/1(例如 AWS IoT) and as mentioned in the doc SUBACK 消息包含已授予的 QOS 级别,可能与请求的级别不匹配。因此,即使订阅客户

(3) 如果客户端在处理消息后崩溃但在发送 PUBACK 之前,则代理可以在客户端重新连接时尝试再次传递消息。