0%

MQTT5.0新特性和实战小tips

MQTT协议基础(7):MQTT5.0部分新特性&实战小技巧

MQTT5.0部分新特性&实战小技巧包括共享主题、双向DISCONNECT、如何传输大文件、消息去重等
MQTT学习的总结思维导图

MQTT5.0新特性

  • 用户属性(User Properties)
    新特性中可以在CONNECT PUBLISH和带有Return Code的数据包中携带一个或多个用户属性数据,这样的可以得知发送方的信息,便于答复。 对于需要得知发布者信息的场景比较适用
  • 共享订阅(Shared Subscriptions)
    多个Client共同订阅一个共享主题,那么这个共享主题的消息就会依次均衡地发布给这些Client,实现订阅者地负载均衡。 适用于发布者对同一主题频繁上传数据量较大的数据包
  • 消息过期(Publication Expiry Interval)
    3.1.1版本中通常是在消息体中携带一个时间来指明,消息过期的时间。这个要求,服务器和客户端时间一致,但某些设备,一旦断电后再重启时间会变得不准确,导致异常。5.0中直接包含消息过期功能,发布时直接指定多久之后过期,避免上述问题。
    适用于客户端有断电、断网等不稳定情形。
  • 重复主题
    3.1.1中连续发布相同主题的消息时,每次都要带上相应的主题消息。 5.0中如果PUBLISH中主题长度置为0,默认使用上一次发布时采用的主题
    适用于连续发布同主题消息
  • Broker能力查询
    5.0协议中,CONNACK数据包中包含了一些预定义的头部文件,用于标记支持哪些MQTT协议功能。如:是否支持Retained消息,是否支持共享订阅,可以支持的最大QoS,可发送最大消息长度,支持的最大Keepalive值,是否支持共享订阅。
  • 双向DISCONNECT
    5.0中Broke在主动断开连接时也会发送DISCONNECT数据包,同时从Client到Broker,以及Broker到Client的CONNECT都会包含一个Reason Code

关于Reason Code其中包含多种返回值,代表具体的断开连接的原因。具体参数表如下
Reason Code

MQTT实战tips

如何传输大文件

基本思路:将大文件先上传到第三方云端,之后传输文件的url。

优点

  • 即可以简化发送的数据包
  • 又可以减少Broker缓存的内存压力
  • 同时第三方云端通常具有更快的下载速度
  • 用户也可以根据需要判断是否需要下载。

如何消息去重

基本思路:在消息体内部设置消息ID,当收到重复ID时,直接丢弃。

思维导图

(建议网页中打开原图查看)
思维导图