将MQTT与Qos 1结合使用时,是否不需要将PUBACK数据包从订户发送到代理?

时间:2020-01-14 05:55:54

标签: mqtt broker

我一直在尝试找出QoS 1的流程,但这很难。

据我了解,当发布者发送一些具有QoS1的数据包时,它必须等待PUB ACK数据包。

我认为当经纪人收到PUB数据包时,它需要将其发送给所有订户。
然后,经纪人也成为发布者

因此,代理将这个PUB数据包发送给所有订阅者
代理还等待所有订户的PUB ACK数据包。
当代理接收到所有PUB ACK数据包时,则将PUB ACK数据包发送到原始发布者(客户端)。

我对吗?
(对发布者和代理之间的流进行了描述,但对于代理和订阅者之间的流进行了描述)

3 个答案:

答案 0 :(得分:3)

QoS一次仅在一个客户端和代理之间进行,没有端到端(发布者到订阅者)的传递通知。

完全有可能以QoS 1发布消息,但仅具有QoS 0的订阅者。您还可以具有多个订阅者,每个订阅者具有不同的QoS订阅,其中一些订阅者的QoS为0,某些订阅者的QoS为1,最后一些订阅者的QoS为2。

发布者与代理之间的QoS交换应在开始将消息继续传递给订阅者之前完成。

答案 1 :(得分:0)

为了执行来自hardillb的解释,经纪人无需等待其他订阅者发送PUBACK,然后再将PUBACK发送给原始发布者。 它可能取决于代理的实现,但只是使用PUBACK回复发布者,然后开始发布(是发布者本身)到可以使用不同QoS级别(0、1或2)进行订阅的订阅者。

答案 2 :(得分:0)

协议消息确认与过程确认之间存在误解。消息确认确认消息的传递,并且过程确认应作为与设备分开的单独消息发送。

即使是在单个客户和经纪人之间,我们也始终建议客户在边缘设备完成其流程时实施自己的流程确认。

相关问题