如何解决MQTT QoS指的是消息传递的哪一部分?
在讨论MQTT QoS时我很困惑。
假设我们有一个具有两个活动客户端A和B的代理。我们要从A发布一条专用于客户端B的MQTT消息,并确保订阅此主题的客户端B收到此消息。
我不确定QoS级别是否是处理此任务的正确工具。
使用QoS 1或2,是否可以确保至少一个(qos = 1)或恰好一个(qos = 2)订户正确地获得了该消息,或者一旦代理正确地获得了消息,它是否已经确认? 对于后一种情况,那么QoS 1的含义是什么(因为总之只有一个代理)?
从这些https://www.hivemq.com/blog/mqtt-essentials-part-6-mqtt-quality-of-service-levels/这样的文档中,我不清楚PUBACK是由代理发布的还是通过代理从客户端转发的。
谢谢您的考虑!
解决方法
要记住的有关QOS握手的重要事情是,它们仅在单个客户端和代理之间进行。 MQTT中没有端到端交付通知。
因此,当客户端A在QOS 1上发布消息时,代理将在收到消息后以PUBACK进行响应。
如果客户端B在QOS 1上订阅,则一旦收到消息,它将使用PUBACK响应代理。
这两组动作完全相互独立。
假设我们有一个拥有两个活跃客户A和B的经纪人。 从专用于客户端B的A发布MQTT消息,并确保 订阅该主题的客户端B收到此消息。
您不应以这种方式思考,客户端A不会向客户端B发布消息,而是向客户端B恰好已订阅的主题发布消息。
您必须记住,客户端A在MQTT协议级别对客户端B完全一无所知,可能有0到无限个客户端订阅了A向其发布消息的主题。可能还会有一些客户端永久订阅该主题,而这些客户端当前处于离线状态。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。