MQTT QoS 服务质量等级

发布时间: 2021-07-05 11:18:58 作者: 大象笔记

在查看腾讯云 MQTT 相关接口时,看到一个参数 Qos:

服务质量等级,取值为0或1

什么是 QoS

Quality of Service,即服务质量。

看上去比较晦涩,找了本专门介绍 MQTT 的书《Hands-On Internet of Things with MQTT》才理解了。

QoS 给终端带来了一项重要的能力,即,可以接收自己离线时,对方发送的消息。例如,Facebook Messager 也是基于 MQTT 实现的消息机制。所以,本质上 MQTT 还是一个消息队列,MQ 已暴露了一切。。。

MQTT QoS 等级

MQTT 设计了 3 个 QoS 等级。

需要注意:publisher 与 subscriber 的 QoS 可以设置不同的等级

即:

但我不确定我理解的是否正确,因为书里的描述,跟腾讯云的描述感觉对不上。。。

经测试确实如此:

如图,MQTT.fx 端订阅时可以指定 QoS:

而我的发布端则是另一个独立的 QoS (腾讯云 golang SDK):

request.Qos = common.Uint64Ptr(1)
response, err := client.PublishMessage(request)

但是,为什么腾讯云只支持 QoS 0 或者 1,而不支持 2 呢?

QoS 0 对 broker (即腾讯云实现的部分)压力最小,因为不需要记录消息是否收到。而 QoS 2 相对 QoS 1 需要的服务器资源相对更多,估计是基于这个考虑,所以大部分云服务器都不支持 QoS 2 吧。

阿里云、腾讯云、亚马逊云都只支持 QoS 0 和 1,不支持 QoS 2。

腾讯云 QoS 各等级详解

搜到了官方开发人员的一篇介绍:

https://cloud.tencent.com/developer/article/1801019

参考

我是一名山东烟台的开发者,联系作者