物联网通信支持 MQTT 协议 V3.1.1 版本,同时支持 QOS0 与 QOS1 的服务质量等级(不支持 QOS2)。使用 MQTT 持久性会话,可保存设备的订阅状态及设备未接收到的订阅消息。设备离线后再次上线时可恢复至之前的会话,并接收到离线时未接收到的订阅消息。
设备端创建 MQTT 持久性会话
设备连接物联网通信时,可将 Connect 连接报文可变报头部分的 CleanSession 标志位设置为0。物联网通信会根据设备连接时的客户端标识符 ClientId 对设备的会话状态进行判断,若当前没有会话则将会创建一个新的持久性会话,若存在已有会话则基于已有的会话进程进行通讯。
物联网通信响应说明
设备端发送 Connect 报文之后,物联网通信将会返回 Connack 报文,报文在连接确认标志位 SessionPresent 中,表明物联网通信是否已包含设备连接时的客户端标识符所对应的会话状态。SessionPresent 为0表示未创建持续性会话,设备端需要重新建立会话状态。SessionPresent 为1表明已创建持续性会话。
设备端成功连接之后,若进入已有的持久性会话,则物联网通信会将存储的 QOS1 消息和未确认的 QOS1 消息发送到设备端。
设备端成功连接之后,若创建了新的持久性会话,物联网通信将会保存设备的订阅状态,并在设备离线时将设备已订阅的 QOS1(不包含 QOS0)消息进行存储。设备再次上线时会将存储的 QOS1 消息和未确认的 QOS1 消息发送到设备端。
说明:
物联网通信发送存储的 QOS1 消息时会按照500ms的间隔依次下发。
可持久性会话中只存储 QOS1 消息,存储消息单设备最多150条,最多存储24小时。
关闭 MQTT 持久性会话
可通过以下两种方式关闭 MQTT 持久性会话。
设备连接物联网通信时,将 Connect 连接报文可变报头部分的 CleanSession 标志位设置为1。
设备断开连接的时间超过24小时,持久性会话会自动关闭。
说明:
设备的断开连接包含设备发送 disconnect 消息和设备通信超时导致的断开连接。