QoS服务质量等级
1.QoS是什么
MQTT是一种轻量级的消息传输协议,它提供了三种QoS(Quality of Service,服务质量)级别,以确保消息的可靠传输。下面是MQTT中三个QoS级别:
·QoS = 0(At Most Once):最多一次传输。
·QoS = 1(At Least Once):至少一次传输。
·QoS = 2(Exactly Once):仅一次传输。
对于较为重要的MQTT消息,我们通常选用QoS为1或2的服务质量。
(1)QoS 0
当QoS设置为0时,消息被发送一次,但没有确认机制,消息可能会丢失或重复。这是最低的QoS级别,适用于对消息完整性要求不高的场景,如天气更新。
(2)QoS 1
当QoS设置为1时,消息被确保至少传递一次,但可能出现重复的消息。
发送端将消息发送给接收端后,会等待接收端的确认。接收端成功接收消息后,会发送一条确认报文PUBACK给发送端。如果发送端收到了这条PUBACK确认报文,那么它就知道消息已经成功接收。
如果没有收到PUBACK确认,则会重传消息。这个级别提供了基本的消息可靠性,适用于对消息的完整性较高的场景,如传感器数据。
(3)QoS 2
QoS设置为2时,消息被确保只传递一次,没有重复。发送方会等到收到PUBREC和PUBCOMP两个确认消息,以确保消息只传递一次。
下面我们来分步看一下Q0S=2时的消息发送和接收基本流程:
①下面我们来分步看一下Q0S=2时的消息发送和接收基本流程。
②接收端回复PUBREC确认报文
③ 发送端会应答PUBREL报文给接收端
④接收端应答PUBCOMP报文给发送端
当接收端收到PUBREL报文后,会应答发送端一条PUBCOMP报文。至此,一次QoS2的MQTT消息传输就结束了。
这是最高级别的QoS,适用于对消息的完整性和顺序性要求非常高的场景,如金融交易。
2.服务质量降级
对于发布和订阅消息的客户端,服务端会主动采用较低级别的QoS来实现消息传输。
3.注意事项
较高的QoS级别会带来更多的通信开销和延迟。因此,在选择QoS级别时,需要权衡网络带宽、延迟和消息可靠性的要求
通过使用适当的QoS级别,可以在消息传输中平衡消息的可靠性和通信效率,确保适合特定场景的消息传输要求。