MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是ISO标准下基于发布/订阅方式的轻量级消息协议,通常用于物联网、智能家居等设备和应用程序之间的通信。
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是ISO标准下基于发布/订阅方式的轻量级消息协议,通常用于物联网、智能家居等设备和应用程序之间的通信。
MQTT 协议由发布者/订阅者和消息代理两部分组成。如图 1 所示,发布者负责将消息推送给代理,代理将消息推送给匹配的订阅者。发布者:通过主题向订阅者发送消息的设备。订阅者:作为终端设备,订阅者通过主题接收发布者发来的消息。消息代理(Broker):服务器充当中央枢纽,负责发布者和订阅者之间的组织级通信。MQTT 主要有两个版本:v3 和 v5。这两个版本的原理基本相同,但是之间还是存在一些关键的区别,下面将从以下几个方面来介绍它们之间的区别。01协议格式MQTT v5 增加了 Property 字段,这使得 MQTT v5 可以支持更多新特性。在 MQTT v3 中,MQTT 并没有什么可以扩展的,这限制了 MQTT 扩展功能的可能性。02主题别名主题是 MQTT 中的核心概念,用于标识消息的内容和意图。在 MQTT v3 中,主题只是一个简单的字符串,其结构由斜杠分隔的一系列单词组成。例如,MQTT v3 主题可以是 sensor/temperature/room1,其中 sensor 是顶级主题,temperature 是其子主题,room1 是子主题下的特定设备。
不过在 MQTT v5 中,主题的结构得到了扩展,并添加了一些更高级的功能。具体来说,MQTT v5 引入了一个新的概念,称为主题别名,允许客户端将主题字符串映射到预定义的主题 ID,从而减少网络流量和消息大小。主题别名由客户端和服务器共同维护,其生命周期和作用域仅限于当前连接。
对于主题,在首次发布时设置一个别名,之后就可以使用该主题别名进行发布。这使得客户端在发送消息时,只需发送主题ID,而不必每次都发送完整的主题字符串。这对于物联网设备和网络带宽有限的环境非常有用。03订阅操作MQTT v5引入了一种新的订阅类型,称为共享订阅。可以使用其他标志和过滤功能来实现更加灵活的订阅。如下图所示,共享订阅允许多个客户端共享一个订阅,并按照一定的规则进行分配。这种订阅类型对于订阅高负载主题非常有用,因为它可以平衡订阅请求,减少单个客户端的负载压力。
此外,MQTT v5 增加了订阅选项的概念,可以指定订阅选项,例如 QoS 级别、Retain As Publish、Retain Handling、消息生命周期等,从而更加精细地控制订阅行为。04遗嘱消息遗嘱消息是MQTT为可能意外断开的设备提供的,可以优雅地将遗嘱发送给第三方的能力。在CONNECT消息的payload中,一些字段发生了变化,其中Will Message(遗嘱消息)变成了Will Payload(遗嘱负载)。
遗嘱属性(WILL Properties)是 MQTT v5 中新增的字段,不同类型的数据包具有不同的属性,例如 CONNECT 数据包具有最大数据包长度、会话过期间隔等属性,SUBSCRIBE 数据包具有订阅标识符等属性。而且,与 v3 相比,MQTT v5 对消息的内容进行了更加灵活的处理,可以包含任意主题、任意消息内容。05错误处理MQTT v5 支持更加细致的错误处理机制,可以通过错误码和错误原因来定位和解决问题。同时,MQTT v5 还引入了新的控制消息——Disconnect 消息,可以帮助客户端和服务端更好地处理错误情况。06流量控制MQTT v5 在 v3 版本的基础上引入了一些新的流量控制机制,以便更好地控制消息的传输和处理,避免由于消息传输速度过快而导致网络拥塞和负载过大。最大数据包大小限制(Maximum Packet Size):MQTT v5 允许客户端与服务端在握手时协商最大数据包大小。如下图所示,可以通过这个最大数据包大小限制来控制客户端与服务端之间传输的最大消息大小,防止由于传输消息过多而导致网络拥塞和负载过大。
消息队列:当服务端发送的消息超出客户端处理的速度时,服务端可以将消息存放在消息队列中,等待客户端处理。MQTT v5 定义了消息队列的队列大小和超时时间,来控制消息队列的大小和生命周期。
注:本文信息来源于iotcentral,版权归原作者所有。如有侵权,请联系我们移除,谢谢。