乐趣区

关于消息中间件:MQTT-QOS

MQTT QoS(服务质量)介绍

MQTT QoS 等级

MQTT 设计了 3 个 QoS 等级。

QoS 0:音讯最多传递一次,如果过后客户端不可用,则会失落该音讯。
QoS 1:消息传递至多 1 次。
QoS 2:音讯仅传送一次。

工作原理

  • QoS 0 – 最多散发一次
    当 QoS 为 0 时,音讯的散发依赖于底层网络的能力。发布者只会公布一次音讯,接收者不会应答音讯,发布者也不会贮存和重发消息。音讯在这个等级下具备最高的传输效率,但可能送达一次也可能基本没送达。
  • Qos 1 – 至多散发一次
    当 QoS 为 1 时,能够保障音讯至多送达一次。MQTT 通过简略的 ACK 机制来保障 QoS 1。发布者会公布音讯,并期待接收者的 PUBACK 报文的应答,如果在规定的工夫内没有收到 PUBACK 的应答,发布者会将音讯的 DUP 置为 1 并重发消息。接收者接管到 QoS 为 1 的音讯时应该回应 PUBACK 报文,接收者可能会屡次承受同一个音讯,无论 DUP 标记如何,接收者都会将收到的音讯当作一个新的音讯并发送 PUBACK 报文应答。
  • QoS 2 – 只散发一次
    当 QoS 为 2 时,发布者和订阅者通过两次会话来保障音讯只被传递一次,这是最高等级的服务质量,音讯失落和反复都是不可承受的。应用这个服务质量等级会有额定的开销。

发布者公布 QoS 为 2 的音讯之后,会将公布的音讯储存起来并期待接收者回复 PUBREC 的音讯,发送者收到 PUBREC 音讯后,它就能够平安抛弃掉之前的公布音讯,因为它曾经晓得接收者胜利收到了音讯。发布者会保留 PUBREC 音讯并应答一个 PUBREL,期待接收者回复 PUBCOMP 音讯,当发送者收到 PUBCOMP 音讯之后会清空之前所保留的状态。

当接收者接管到一条 QoS 为 2 的 PUBLISH 音讯时,他会解决此音讯并返回一条 PUBREC 进行应答。当接收者收到 PUBREL 音讯之后,它会抛弃掉所有已保留的状态,并回复 PUBCOMP。

无论在传输过程中何时呈现丢包,发送端都负责重发上一条音讯。不论发送端是 Publisher 还是 Broker,都是如此。因而,接收端也须要对每一条命令音讯都进行应答。

  • 公布、订阅 QOS
    会在 pub、sub 两者间取最小
退出移动版