qos 是发送方和接收方之间达成的协议,不是发布者和订阅者之间达成的协议。
也就是说发布者 Publish 一条 qos = 1 的消息,只能保证 Broker 能至少收到一次这个消息,至于对应的订阅者能否至少收到一次这个消息,还要取决于订阅者在 Subscribe 的时候和 Broker 协商的 qos 等级。
qos 为1 或者2时,消息会携带 messageId,qos 为 0 时没有。
qos = 0,最多一次送达。也就是消息发出去就直接删除掉,没有后面的事情了。
qos = 1,至少一次送达。发送方消息发出去之后会将消息保存,等待接收方带 messageId 的回应,如果没有回应,就会重新发送,直到回应到达后再把消息删除。
qos = 2,准确一次送达。
- 发送方消息发送后保存发送的消息,等待接收方回应,如果没有回应将会再次发送。
- 接收方会记录收到的 messageId,之后再收到相同 messageId 的消息都会被丢弃掉。
- 接收方发送带 messageId 的确认消息,等待发送方的回应,如果没有等到发送方回应,接收方会重复发送确认消息。
- 发送方收到确认消息之后,删除发送的消息,并发送带 messageId 的已确认消息。
- 接收方接收已确认消息后删除确认消息。
本文深入解析MQTT协议中QoS级别的工作原理。QoS 0确保消息最多送达一次,QoS 1确保消息至少送达一次,而QoS 2则实现准确一次送达。文章详细解释了不同QoS级别下消息的处理流程,包括消息ID的使用和确认机制。
2015

被折叠的 条评论
为什么被折叠?



