具有多个 QOS 2 订阅者的 MQTT QOS 2

问题描述

我在我的项目中使用 MQTT V5,我有如下业务需求:

“发布者应收到订阅者的确认,确认他们已成功收到发布者的消息”。

请注意,这与 MQTT V5 中引入的 MQTT 请求/响应模式完全不同。我的发布者不需要传统的正确响应,其中包含数据。我的发布者只需要一个接收确认就知道它的消息已被订阅者接收。就是这样,通信数据包越轻对我来说越好。

我阅读了以下文章https://www.emqx.io/blog/introduction-to-mqtt-qos

其中包括以下 QoS 2 序列图:

MQTT QoS 2 sequence diagram

我完全理解当只有一个订阅者时的确认序列,如图所示。

我的问题是:

如果发布者的主题有多个订阅者,所有订阅者都订阅了 QoS 2:

1 - 我的发布者会为每个订阅者收到一份 PUBCOMP 确认吗?换句话说,我的发布者是否会收到来自代理的多个 PUBCOMP 确认。

2 - 还是代理仅在成功收到所有订阅者的 PUBCOMP 确认后才向我的发布者发送一条 PUBCOMP 消息?换句话说,代理是否只有在成功将消息传递给所有订阅者后才会向我的发布者发送一个 PUBCOMP ack?

预先感谢您关注这个问题。

解决方法

高 QOS 一次只在一个客户和经纪人之间,而不是端到端的交付。

如果有一个离线客户端持续订阅匹配的主题,那么该图就会失效。如果给定的图表是这种情况,那么客户端将不会收到 PUBCOMP,直到该客户端重新上线(这可能永远不会)。这也意味着它永远不会发布另一条消息,因为在 QOS2 中一次只能有一条消息在传输。

那个图不可能是正确的。 (它还让代理在消息从发布客户端传送之前存储消息)。如果订阅客户端在 QOS0 或 QOS1 订阅,它也不处理会发生什么