MQTT协议基础(2):MQTT协议的QoS等级
MQTT协议的QoS等级知识包括三种等级、QoS0、QoS1、QoS2
三种等级下的通信过程
在讲解具体控制报文之前,先介绍QoS(Quality of Service)这个概念。所谓的QoS等级,是适用不同场景下,可以提供不同的服务质量等级。
MQTT提供的QoS
QoS0:至多一次
发送者尽力向接收者发送消息,如果发送失败,则放弃。
QoS1:至少一次
发送者向接收者发送消息,如果发送失败,发送者继续重试,直到接收者收到消息,但是因为重传的原因,接收者可能会收到重复的消息。
QoS2:确保只有一次
发送者向接收者发送消息,如果发送失败,发送者继续重试,直到接收者收到消息,同时还需要保证,接收者不会因为消息重传而收到重复的消息。
不同QoS等级传输模型
QoS0等级
QoS1等级
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协议下发布消息的过程。