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

时间:2019-11-03 14:23:10

标签: embedded mqtt iot paho

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

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

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

  3. 在什么情况下可以多次接收QoS 1消息?

1 个答案:

答案 0 :(得分:3)

(1)仅保证通过TCP / IP在QOS0处传递的消息已到达远程计算机的TCP堆栈,而不是到达正在运行的实际应用程序(是MQTT客户端还是MQTT代理)。

应用程序不仅会确认以更高的QOS发送的消息,而不仅仅是主机的TCP / IP堆栈,因此您可以确定它是否已被实际处理。

(2)某些代理可能仅支持QOS 0或QOS 0/1(例如AWS IoT),并且如doc中所述,SUBACK消息包括已授予的QOS级别,该级别可能不匹配要求什么。因此,即使订阅客户端

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