emqx的发送Qos为1,接收方接收的消息顺序怎么和发送方一致,怎么保证的,会存在接收方跟发送方不一致的情况吗

emqx的发送Qos为1,如果发送多条消息msg1,msg2的顺序,接收方msg1消息没有回复ack,msg2会先收到到吗,还是服务端要等msg1的ack才能发送msg2,emqx怎么保证顺序

MQTT 是基于 TCP 的,而 TCP 会保证消息的顺序到达,也就是说,如果客户端按 1,2,3 的顺序发送消息,Broker 就不可能按 1,3,2 的顺序收到,所以也不可能出现 Broker 先回复了 3 的 ACK,如果出现这种情况只能是 Broker 实现有误。

然后再说发布者和订阅者,举个例子,由于发布者没有收到 PUBACK,所以重传了消息,导致实际的发布顺序变成了 1,2,3,2,3。那么 Broker 将消息转发给订阅者的顺序也会变成 1,2,3,2,3,如果订阅者没有及时回复 ACK,导致此时也出现了重传,那么实际消息顺序可能变成 1,2,2,3,2,3。

消息可能重复,但不会失序,也就是说 3 不可能先于第一个 2 被收到。

感谢,非常专业

请问一下,这里的PUBACK是有两种吗,一种是Broker返回给发布者,这个跟订阅者没关系?,另外一种是订阅者返回给Broker吗,这个后面还好返回发布者吗

其实就一种,接收方返回给发送方的。

发布者发布 QoS 1 消息给 Broker,发布者是发送方,Broker 是接收方。

Broker 转发 QoS 1 消息给订阅者,Broker 是发送方,订阅者是接收方。