订阅选项

本文介绍物联网平台支持的MQTT 5.0新特性的订阅选项。

功能说明

设备订阅时通过设置订阅选项可以改变物联网平台的行为,MQTT 5.0支持的订阅选项如下:

特性

说明

QoS level

MQTT消息服务质量等级,与MQTT 3.1相同。

No Local

设备是否接收自己发布的消息。

Retain As Publish

物联网平台向设备发布消息时是否保留其中的Retain标识。

Retain Handling

指定订阅建立时服务端是否向设备发送保留消息。

重要
  • 使用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:接收。

设备通配订阅时,使用该特性,既简化订阅动作,又可以避免收到无意义的消息。如下图所示:

image..png

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:即使设备订阅成功,服务端也不会发送保留消息。