我一直在使用Paho C库在严格资源限制的嵌入式设备上开发始终连接的MQTT客户端。这是我的问题:
除了代理和客户端崩溃,还有其他原因导致QoS 0消息无法到达目的地吗?
在订阅请求中,代理是否可能不接受请求的QoS?
在什么情况下可以多次接收到QoS 1消息?
((1)仅保证通过TCP / IP在QOS0处传递的消息已到达远程计算机的TCP堆栈,而不是到达正在运行的实际应用程序(是MQTT客户端还是MQTT代理)。
在较高的QOS上发送的消息不仅被主机的TCP / IP堆栈所识别,而且还被应用程序确认,因此您可以确定它已经被实际处理。
((2)某些代理可能仅支持QOS 0或QOS 0/1(例如AWS IoT),并且如doc中所述,SUBACK消息包括已授予的QOS级别,该级别可能与请求的级别不匹配。因此,即使订阅客户端
((3)如果客户端在处理完消息后崩溃但在发送PUBACK之前崩溃,则代理可以尝试在客户端重新连接时再次尝试传递消息。