使用带有 Qos 1 的 MQTT 时,不需要从订阅者向代理发送 PUBACK 数据包吗?

When using MQTT with Qos 1, there is no need to send PUBACK packet from subscriber to the broker?

我一直想找出QoS 1的流程,但是很难。

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

我想当代理收到一个 PUB 数据包时,它需要将它发送给所有订阅者。
然后,经纪人也成为了出版商

因此代理将此 PUB 数据包发送给所有订阅者
并且代理还等待来自所有订阅者的 PUB ACK 数据包。
当代理收到所有的 PUB ACK 数据包,然后发送 PUB ACK 数据包给原来的发布者(客户端)。

我说得对吗?
(有关于发布者和 Broker 之间的流程的描述,但没有关于 Broker 和订阅者之间的流程的描述)

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

完全有可能以 QoS 1 发布消息,但只有 QoS 0 的订阅者。您也可以有多个订阅者,每个订阅者具有不同的 QoS 订阅,一些订阅者 QoS 0,一些订阅者 QoS 1,最后一些订阅者 QoS 2.

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

为了加强 hardillb 的精彩解释,代理在将 PUBACK 发送给原始发布者之前不会等待其他订阅者发送 PUBACK。 它可能取决于代理的实现,但它只是用 PUBACK 回复发布者,然后开始发布(是的,它本身就是发布者)给可以订阅不同 QoS 级别(0、1 或 2)的订阅者。

协议消息确认和进程确认之间存在误解。 Message Acknowledgement 确认消息的传递,Process acknowledgement 应作为来自设备的单独消息发送。

即使是在单个客户和代理之间,我们总是建议我们的客户在边缘设备完成他们的流程时实施他们自己的流程确认。