QOS(Quality of Servicce)质量服务等级

什么是质量服务等级?

MQTT协议设计初衷是提供一套保证消息稳定传输的机制,用于网络带宽窄,信号不稳定环境下的数据传输,这套机制包括消息应答,存储和重传。MQTT服务质量用于告知物联网,哪些信息比较重要,哪些信息没那么重要,将信息按照不同的QOS等级进行传输。

MQTT消息质量有三个等级,QoS 0,QoS 1和 QoS 2。

QoS 0:最多发一次,占用资源最少。

QoS 1:最少发一次,但消息可能会重复。

QoS 2:保证收一次,时间长。

QOS 0:

消息的传递完全依赖底层的TCP/IP网络,协议里没有定义应答和重试,消息要么只会到达服务端一次,要么根本没有到达。

MQTT服务端和客户端不会对消息传输是否成功进行确认和检查,消息能否传输成功全看网络环境是否稳定。

QOS 1:

发送端在消息发送完成后,会检查接收端是否已经成功接收到了消息

服务器的消息接收由PUBACK消息进行确认,如果通信链路或发送设备异常,或者指定时间内没有收到确认消息,发送端会重发这条在消息头中设置了DUP位的消息,信息传输有保障,但是消息可能会重复。

QOS 2:

发送端发送信息之后,需要接受端2次确认。

这是最高级别的消息传递,消息丢失和重复都是不可接受的,使用这个服务质量等级会有额外的开销,时间也是最慢的。

QOS设置

发布消息:发布信息时,PUBLISH数据包中将qos设置为对应的等级。

订阅消息: 订阅主题时,SUBSCRIBE数据包中设置对应的qos级别。

接收端连接服务端:连接请求CONNECT--cleanSession设置为false (qos=1/2 ; qos=0无需设置,默认即可)。若客户端A发送给服务端Qos=2,服务端发送给客户端B的Qos=1,这时服务端会用较低级别来提供服务即服务质量降级(服务端会主动采用低级别的Qos进行消息传输


小结

● 若想实现QoS>o,订阅端连接服务端时cleanSession需要设置为false,订阅端订阅主题时,QoS>o,发布端发布消息时的QoS>o。

● 服务端会选择发布消息和订阅消息中较低的QoS来实现消息传输,这也被称作"服务降级"。

● QoS=o,占用的网络资源最低,但是接收端可能会出现无法接收消息的情况,所以适用于传输重要性较低的信息。

● QoS=1,MQTT会确保接收端能够接收到消息,但是有可能出现接收端反复接收同一消息的情况。

● QoS=2,MQTT会确保接收端只接收到一次消息。但是QoS为2时消息传输最慢,另外消息传输需要多次确认,因此所占用的网络资源也是最多的,此类服务等级适用于重要消息传输。

● 由于QoS1和QoS2都能确保客户端接收到消息,但是QoS1所占用的资源较QoS2占用资源更小。因此建议使用QoS1来实现网络资源较为珍贵的环境下传输重要信息。

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章