我在我的项目中使用MQTT V5,我有如下业务需求:
“发布者应收到来自订阅者的确认,确认他们已成功接收发布者的消息”。
请注意,这与MQTT V5中引入的MQTT请求/响应模式所满足的要求完全不同。我的publisher不需要包含数据的传统正确响应。我的发布者只需要一个回执确认,就可以知道订阅者已经收到了它的消息。就是这样,通信包越轻对我来说就越好。
我读了下面这篇文章:https://www.emqx.io/blog/introduction-to-mqtt-qos
其中包括以下QoS 2的序列图:
我完全理解当只有一个订阅者时的确认序列,如图所示。
我的问题是:
如果有多个订阅者订阅发布者的主题,则所有订阅者都订阅了QoS 2:
1-我的发布者是否会收到每个订阅者的一个PUBCOMP确认?换句话说,我的发布者是否会从代理收到多个PUBCOMP ack。
2-或者代理是否仅在从所有订阅者成功接收到PUBCOMP确认后才向发布者发送一条PUBCOMP消息?换句话说,只有在成功地将消息传递给所有订阅者之后,代理才会向我的发布者发送一个PUBCOMP ack吗?
提前感谢您对这个问题的关注。
发布于 2021-04-22 21:42:51
高QOS一次只在一个客户端和代理之间进行,而不是端到端的交付。
如果存在对匹配主题的持久订阅的离线客户端,则该图将被分解。如果给定的图表是这种情况,那么客户端将不会收到PUBCOMP,直到该客户端重新联机(这可能永远不会)。这也意味着它永远不能发布另一条消息,因为在QOS2中一次只能有一条消息在传输中。
那个图表不可能是正确的。(它还让代理在消息从发布客户端传递之前存储消息)。它也不会处理订阅客户端在QOS0或QOS1上订阅时发生的情况
https://stackoverflow.com/questions/67211172
复制相似问题