我在嵌入式应用程序中使用 MQTT。我已经广泛阅读了文档,并且了解 QoS 功能是如何在 MQTT 中实现的,以及每个值的含义。
众所周知,MQTT 会进行 QoS 降级,这意味着消息将在发送方和接收方之间以最低 QoS 值传递。这是可以理解的,并且对于发送和接收之间的大多数 QoS 组合来说,这是有道理的。
但是,我对特定情况有疑问。当客户端订阅了 QoS 2 时,如果使用 QoS 1 发布消息会发生什么?
消息将至少一次传递给代理,这意味着它可能被传递多次。另一方面,订阅客户端期望它保证只接收一次消息,但事实并非如此。
如何克服这一严重问题?本质上我不能信任 QoS 2 设置。
(注意,通常这不会成为问题,因为我可以使用 QoS 2 发布消息。但是,当发布客户端超出您的控制范围时,这会成为问题,并且无法保证它们将使用哪种 QoS。)