虹科干货 | MQTT 5协议中的基础更改(一)

一、协议的基础性变化

MQTT 5是对现有协议规范的重大更新,新版本协议具有以下特征:轻量级、易用性、极强的可扩展性、对移动网络的适用性以及通信参与者的解耦。

二、MQTT仍然是MQTT

如果您熟悉MQTT3.1.1,那么您之前知道的关于MQTT的所有原则和功能同样适用于MQTT v5。不同的是,以往功能的部分细节,如“Last Will and Testament”发生了一点变化,某些功能也得到扩展。此外,由虹科HiveMQ实现的额外的流行功能,如“TTL”或“共享订阅”被添加到新的规范中。

协议也稍有变化,增加了一个额外的控制包(AUTH)。

但总的来说,MQTT5仍然可以清楚地识别为MQTT。

三、MQTT 头部属性和原因代码

MQTT5最灵活的新功能之一是可以在MQTT头部中添加自定义键值(key-value)属性。与HTTP等协议类似,MQTT客户端和代理可以添加任意数量的自定义(或预定义)头部来携带元数据。这种元数据可用于应用程序的特定数据,而预先定义的头部信息被用于实现大多数新的MQTT功能。

许多MQTT数据包现在也包括原因代码(Reason Codes)。一个原因代码表明发生了一个预先定义的协议错误。这些原因代码通常是在确认数据包中进行,允许客户端和代理解释错误情况(并有可能解决错误情况)。原因代码有时也被称为否定确认(Negative Acknowledgements)。以下MQTT数据包可以携带原因代码:

  • CONNACK
  • PUBACK
  • PUBREC
  • PUBREL
  • PUBCOMP
  • SUBACK
  • UNSUBACK
  • AUTH
  • DISCONNECT

四、CONNACK Return Codes—指示不支持/未实现功能

随着MQTT的普及,许多公司创建并提供了许多MQTT部署。但并非所有的这些实现都是完全兼容MQTT规范的,因为有时候一些功能并没有实现,比如QoS 2、保留消息持久会话。值得一提的是,虹科HiveMQ是完全符合MQTT规范的,并且支持所有的功能。

MQTT 5为不完整的MQTT实现提供了一种方法,用来表明该代理不支持特定的功能。客户端的工作是确保不使用不支持的功能。代理的部署是在CONNACK数据包(客户端发送CONNECT数据包后由代理发送)中使用预定义的标头来表明不支持特定的功能。当然,这些标头也可以用来向客户端发送通知,说明它没有使用特定功能的权限。

在MQTT 5中,有以下预定义的头部用于指示未实现的功能(或不允许客户端使用的功能):

这些返回代码对于在异构环境中沟通各个MQTT客户端的权限具有重要作用。这个新功能的缺点是:MQTT客户端需要自己实现对这些代码的解释,并且需要确保应用程序的程序员仅使用代理支持(客户端有权限)的功能。虹科HiveMQ 100% 支持所有 MQTT 5 功能,因此只有在涉及到部署中的权限时,管理员才会使用这些自定义头文件。

下期文章中,我们将继续给大家介绍MQTT5协议中的基础更改中其他新功能的细节描述。

五、关于虹科HiveMQ

虹科HiveMQ 是一个基于 MQTT 数据传输的通信平台,旨在将数据快速、高效、可靠地传递给连接的物联网设备,HiveMQ 使用 MQTT 协议在设备和企业平台之间进行实时、双向的数据推送。

虹科HiveMQ 的建立是为了解决企业在构建新的物联网应用时面临的一些关键技术挑战,包括:

  • 构建可靠、可扩展的关键业务物联网应用

  • 快速的数据交付,以满足终端用户对响应式物联网产品的期望

  • 通过有效利用硬件、网络和云资源降低运营成本

  • 将物联网数据整合到现有的企业系统中

虹科HiveMQ 提供免费版、专业版、企业版 MQTT Broker 产品,并提供 Kafka、企业安全及 MQTT Broker 桥接三种企业级扩展套件,HiveMQ 还提供高效的 MQTT 客户端及云平台,多方位满足用户需求。