增强端云交互

更新时间:

本文介绍云消息队列 MQTT 版支持的MQTT 5.0新特性的增强端云交互功能说明。

功能介绍

MQTT 5.0 引入了多项新特性来增强客户端与服务器(云)之间的交互,比如请求/响应模式、订阅选项以及改进的错误报告等。这些新特性旨在提高通信的灵活性、可靠性和持久性,并为不同的端到云应用场景提供更有效的解决方案。

应用场景

  • 请求/响应交互:客户端可以向服务器请求数据或执行动作,并从服务器接收响应,就像传统的HTTP请求/响应模型一样。

  • 服务质量(QoS)管理:订阅选项允许客户端指定最大QoS级别,并控制是否接收保留消息,确保服务质量。

  • 状态同步:保留消息和会话过期功能能够帮助客户端在断线重连时恢复其会话状态,提高通信的持久性。

建连交互

建连交互是提供一种设备端和服务端协商的能力,客户端建连时设置配置参数,服务端回复最终支持的功能以及配置项最后的值。

建连交互

参数说明

服务端返回

是否支持通配订阅

  • 1:支持。

  • 0:不支持。

1

是否支持订阅标志符

  • 1:支持。

  • 0:不支持。

1

是否支持主题别名

  • 1:支持。

  • 0:不支持。

1

支持的最高QoS

  • 2:QoS 2。

  • 1:QoS 1。

  • 0:QoS 0。

2

连接保活时间

在保活时间内需要有心跳包或数据包,否则会被断开连接。

取值范围:1~8。

单位:分钟。

返回设备设置值。

如果超过最大取值范围8分钟,按照8分钟设置。

会话过期时间

连接断开后,会话的保留时间。

取值范围:0~2147483647。

单位:秒。

返回设备设置值。

如果没有设置则默认为0,断开连接会话立即过期。如果设置了过期时间则最小过期间隔不少于10分钟,小于10分钟的情况下,按照10分钟设置。

最大的数据包长度

取值范围:0~128。

单位:KB。

说明
  • 数据包中的消息体最大值为64 KB。

  • 服务端接收到数据包后不会检查大小,直接推送到服务端。如果您需要服务端检查数据包大小,并在数据包超过最大值时拦截该报文,请联系云消息队列 MQTT 版技术支持,钉钉群号:35228338。

固定值131072,表示128 KB。

最大主题别名个数

取值范围:0~30。

  • 单个连接中,服务端最多支持30个主题别名。客户端发送给服务端的消息中,主题别名个数超过30个则关闭连接,并报Topic名字错误。

  • 单个连接中,客户端向服务端声明自己支持的Topic别名个数最多设置为30个,超过30个,服务端推送消息时将不会设置Topic别名。

Receive Maximum

MQTT 5.0新增了Receive Maximum属性,它存在于CONNECT报文与CONNACK报文,表示客户端或服务端能够同时处理的QoS为1、QoS为2的PUBLISH报文最大数量,即对端可以使用的最大发送配额,最大值为65535,超过该数值则按照65535设置。

Receive Maximum属性提供了告诉对端发送QoS为1、QoS为2的PUBLISH的最大数量,对端发现未决PUBLISH个数等于Receive Maximum时,不能再发送QoS为1、QoS为2的PUBLISH消息了,以此来实现流量控制。

服务端主动断开

在MQTT 5.0中,服务端可以发送主动断开报文,并支持设置一个错误码及错误原因的字符串,用户可以根据返回的错误内容排查具体出错的原因。

常见错误码

十进制

十六进制

名称

报文

0

0x00

成功(Success)

CONNACK, PUBACK, PUBREC, PUBREL, PUBCOMP, UNSUBACK, AUTH

0

0x00

正常断开连接(Normal disconnection)

DISCONNECT

0

0x00

QoS 0(Granted QoS 0)

SUBACK

1

0x01

QoS 1(Granted QoS 1)

SUBACK

2

0x02

QoS 2(Granted QoS 2)

SUBACK

4

0x04

与遗嘱消息断连(Disconnect with Will Message)

DISCONNECT

17

0x11

不存在订阅(No subscription existed)

UNSUBACK

128

0x80

未指定错误(Unspecified error)

CONNACK, PUBACK, PUBREC, SUBACK, UNSUBACK, DISCONNECT

129

0x81

畸形报文(Malformed Packet)

CONNACK, DISCONNECT

130

0x82

协议错误(Protocol Error)

CONNACK, DISCONNECT

131

0x83

特定实现错误(Implementation specific error)

CONNACK, PUBACK, PUBREC, SUBACK, UNSUBACK, DISCONNECT

132

0x84

不支持的协议版本(Unsupported Protocol Version)

CONNACK

133

0x85

客户标识符无效(Client Identifier not valid)

CONNACK

134

0x86

用户名或密码错误(Bad User Name or Password)

CONNACK

135

0x87

未经授权(Not authorized)

CONNACK, PUBACK, PUBREC, SUBACK, UNSUBACK, DISCONNECT

136

0x88

服务器不可用(Server unavailable)

CONNACK

137

0x89

服务器繁忙(Server busy)

CONNACK, DISCONNECT

138

0x8A

禁止访问(Banned)

CONNACK

140

0x8C

错误验证方法(Bad authentication method)

CONNACK, DISCONNECT

141

0x8D

保活超时(Keep Alive timeout)

DISCONNECT

142

0x8E

会话被接管(Session taken over)

DISCONNECT

143

0x8F

主题过滤无效(Topic Filter invalid)

SUBACK, UNSUBACK, DISCONNECT

144

0x90

主题名称无效(Topic Name invalid)

CONNACK, PUBACK, PUBREC, DISCONNECT

145

0x91

正在使用数据包标识符(Packet Identifier in use)

PUBACK, PUBREC, SUBACK, UNSUBACK

146

0x92

找不到数据包标识符(Packet Identifier not found)

PUBREL, PUBCOMP

147

0x93

超过接收最大值(Receive Maximum exceeded)

DISCONNECT

148

0x94

主题别名无效(Topic Alias invalid)

DISCONNECT

149

0x95

数据包过大(Packet too large)

CONNACK, DISCONNECT

150

0x96

消息速率过高(Message rate too high)

DISCONNECT

151

0x97

超出配额(Quota exceeded)

CONNACK, PUBACK, PUBREC, SUBACK, DISCONNECT

153

0x99

有效载荷格式无效(Payload format invalid)

CONNACK, PUBACK, PUBREC, DISCONNECT

154

0x9A

不支持消息保留(Retain not supported)

CONNACK, DISCONNECT

155

0x9B

不支持的QoS(QoS not supported)

CONNACK, DISCONNECT

158

0x9E

不支持的共享订阅(Shared Subscription not supported)

SUBACK, DISCONNECT

159

0x9F

超出连接速率(Connection rate exceeded)

CONNACK, DISCONNECT

160

0xA0

最大连接时间(Maximum connect time)

DISCONNECT

161

0xA1

不支持订阅标识符(Subscription Identifiers not supported)

SUBACK, DISCONNECT

162

0xA2

不支持通配符订阅(Wildcard Subscriptions not supported)

SUBACK, DISCONNECT