MQTT已成为将物联网(IoT)设备连接到云的流行协议。MQTT最初开发于1999年,用于监视卫星网络上的石油和管道。当时,需要一种协议,它对于电源有限的远程设备有效,带宽使用效率高并且能够在不可靠的网络连接上运行的协议。开发MQTT时,还没有创造出IoT这个术语,也没有云计算,也没有出现各种IoT使用案例。
由于这些原因,需要更新MQTT协议,以解决在大型云平台上托管MQTT和处理其他物联网用例所需的某些缺少的功能。在2015/2016年,OASIS内部开始研究新版本的规范MQTT5。在2019年3月,MQTT 5被批准为正式的OASIS标准。
MQTT中有许多新特性,但是有5个关键特性可以改进MQTT系统的错误处理、可伸缩性和灵活性。
会话和消息到期
MQTT 5现在允许每个会话和消息指定一个时间限制。如果消息在指定的时间段内未送达,则会将其删除。如果消息需要在一段时间内到达,这对于安全关键用例来说非常重要。
共享订阅
共享订阅允许多个MQTT客户端实例共享来自MQTT代理的相同主题的订阅。如果已设置MQTT客户端以将MQTT数据流传输到后端企业系统(例如数据库)中,则此功能非常有用。可以在不同的群集节点之间部署共享相同订阅的不同MQTT客户端,以帮助实现可伸缩性和高可用性。
否定确认(Negative Acknowledgements)
现在,支持MQTT 5的MQTT代理可以发送否定确认消息,以拒绝某些类型的消息,例如最大QoS,最大消息大小以及代理中不受支持的功能。拒绝超过最大消息大小的消息对于识别可能已变为恶意的MQTT客户端很有用。
有效载荷格式指示器(Payload Format Indicators)
MQTT一直是与负载无关的,但是MQTT 5现在允许添加负载格式指示符、二进制值或文本。这将使处理MQTT消息更加容易。
用户属性
除了有效载荷格式指示符之外,MQTT 5消息现在还可以包括用户属性,这些属性将键值属性添加到消息头中。这些属性允许将特定于应用程序的信息添加到每个消息头。
小结
MQTT社区正在逐渐包括对各种MQTT实现的MQTT 5支持,包括Eclipse Paho,Mosquitto和HiveMQ。如果您正在考虑在下一个物联网应用程序中使用MQTT,请强烈考虑使用MQTT 5。