本文介绍物联网平台支持的MQTT 5.0新特性的订阅选项。
功能说明
设备订阅时通过设置订阅选项可以改变物联网平台的行为,MQTT 5.0支持的订阅选项如下:
特性 | 说明 |
MQTT消息服务质量等级,与MQTT 3.1相同。 | |
设备是否接收自己发布的消息。 | |
物联网平台向设备发布消息时是否保留其中的Retain标识。 | |
指定订阅建立时服务端是否向设备发送保留消息。 |
使用C LinkSDK接入时,订阅选项默认值都为0。
No Local选项建议设置为1,可以减少不必要的消息传输。
QoS level
消息质量分三个等级:
等级 | 说明 | 常见场景 |
QoS 0 | 消息最多收到一次,消息不可靠传输,消息可能丢失。 | 传感器数据传输使用该等级。 |
QoS 1 | 消息最少收到一次,消息可靠传输,消息必达。 | 远程控制指令。 |
QoS 2 | 消息仅收到一次。 说明 物联网平台暂不支持。 | 无。 |
No Local
对于MQTT 3.1.1版本协议,如果设备订阅了自己发布消息的Topic,则设备会接收到自己发布的消息。而使用MQTT 5.0版本协议,此场景下,设备在订阅Topic时,可以设置此选项为1,设备将不会接收到自己发布的消息。
可取值:
1:不接收。
0:接收。
设备通配订阅时,使用该特性,既简化订阅动作,又可以避免收到无意义的消息。如下图所示:
Retain As Publish
物联网平台向设备端转发消息时,可指定是否需要保留消息中的Retain标识。
配置方法,订阅Topic时设置Retain As Publish:
1:物联网平台转发普通消息时,保留Retain标识;代理发送保留消息时,保留Retain标识。
0:物联网平台转发普通消息时,不保留Retain标识;代理发送保留消息时,保留Retain标识。
如下表所示,发布者发布消息中Retain标识可为:
True:发布消息中有Retain标识,根据Retain As Publish设置,决定设备收到消息中是否保留该标识。
False:发布消息中没有Retain标识,Retain As Publish设置无效,消息中都不会保留该标识。
发布者发布消息中Retain | 发布时订阅状态 | 订阅选项(Retain As Publish) | 设备收到的消息中Retain |
True | 已订阅(立即转发消息) | 1 | True |
0 | False | ||
无订阅(订阅后,发布保留消息) | 1 | True | |
0 | True | ||
False | 任意状态 | 任意值 | False |
由上可知,设备订阅收到的消息中Retain标识有两层含义:
发布者发布消息时,是否有Retain标识,通过将Retain As Publish设置为1实现。
消息是否为保留消息,由物联网平台保留代理发布的,通过将Retain As Publish设置为0实现。
Retain Handling
该特性用来指定订阅建立时服务端是否向设备发送保留消息。
取值:
0:只要设备订阅成功,服务端就发送保留消息。
1:设备订阅成功且该订阅之前不存在,服务端才发送保留消息。同一个会话,重复订阅的场景将不再收到保留消息。
2:即使设备订阅成功,服务端也不会发送保留消息。