0%

MQTT协议的QoS等级

MQTT协议基础(2):MQTT协议的QoS等级

MQTT协议的QoS等级知识包括三种等级、QoS0、QoS1、QoS2
三种等级下的通信过程

在讲解具体控制报文之前,先介绍QoS(Quality of Service)这个概念。所谓的QoS等级,是适用不同场景下,可以提供不同的服务质量等级。

MQTT提供的QoS

  • QoS0:至多一次

    发送者尽力向接收者发送消息,如果发送失败,则放弃。

  • QoS1:至少一次

    发送者向接收者发送消息,如果发送失败,发送者继续重试,直到接收者收到消息,但是因为重传的原因,接收者可能会收到重复的消息。

  • QoS2:确保只有一次

    发送者向接收者发送消息,如果发送失败,发送者继续重试,直到接收者收到消息,同时还需要保证,接收者不会因为消息重传而收到重复的消息。

不同QoS等级传输模型

  • QoS0等级

    QoS0等级

  • QoS1等级

    QoS1等级

  • QoS2等级

    QoS2等级

    为何QoS2可以保证消息不重复?

    1
    2
    3
    4
    5
    6
    先说QoS2的整体工作流程如下
    1.给要发送的新应用消息分配一个未使用的报文标识符。
    2.发送的PUBLISH报文必须包含报文标识符且报文的QoS等于2,DUP等于0。
    3.将这个PUBLISH报文看作是未确认的,直到从接收者那收到对应的PUBREC报文。
    4.收到PUBREC报文后必须发送一个PUBREL报文。PUBREL报文必须包含与原始PUBLISH报文相同的报文标识符。
    5.将这个PUBREL报文看作是未确认的,直到从接收者那收到对应的PUBCOMP报文。

    在保证不重复时,采用了这样的规则:一旦发送了对应的PUBREL报文就不能重发这个PUBLISH报文。

更深一步的剖析QoS2协议下发布消息的过程。

深度剖析