生如夏花的博客

专注于工业物联网行业数据采集,嵌入式Linux系统裁剪,5G智慧网关软件开发等

MQTT(10)

MQTT简介

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)是一个基于C/S架构的发布/订阅模式的消息传输协议

目的是在带宽和连接有限的不可靠网络的环境下发送少量数据,设计思想是轻量、开放、简单并且易于实现。

这些特性使得MQTT非常适合在受限的环境的环境中使用,比如机器对机器(M2M)通信和物联网(IoT)。

MQTT发布/订阅模式

发布/订阅(Pub/Sub)架构提供了一种灵活的、可伸缩的方式来构建能够处理许多连接的客户端的分布式系统。

MQTT基于发布/订阅架构,支持持久会话与服务质量QoS功能,实现了发布者与订阅者在空间、时间以及同步等方面的解耦。

MQTT建立连接

MQTT协议的两个主要组件是客户端和代理。

MQTT客户端可以是任何运行MQTT库并通过网络连接到MQTT代理的设备。

MQTT代理负责接收、过滤以及向已订阅的客户端发送消息,并处理客户端身份验证和授权。

MQTT主题

MQTT主题是MQTT客户端和代理之间进行通信的关键。

根据主题可以对消息进行有效的过滤和路由。

与消息队列相比,MQTT主题非常轻量。

客户端在发布或订阅所需的主题之前不需要创建该主题。代理接受每个有效的主题,而不需要事先进行任何初始化。

MQTT服务质量

MQTT Quality of Service(QoS,服务质量)是消息发送者和接收者之间的协议,用于定义消息的传递保证级别。

QoS具有3个级别,分别是:

  1. 最多一次(QoS 0)
  2. 至少一次(QoS 1)
  3. 确定一次(QoS 2)

其中涉及的MQTT报文有四种,分别是PUBLISH、PUBACK、PUBREC以及PUBCOMP。

MQTT持久会话

MQTT中的持久会话允许客户端在断开连接时维护其会话状态,包括订阅的主题和未传递的消息。

非持久会话在断开连接时丢弃会话状态,要求客户端重新连接上再次订阅主题,并可能错过在断开连接期间发布的消息。

持久会话和非持久会话的选择取决于应用程序对会话连续性和消息持久性的要求。

MQTT保留消息

MQTT的保留消息可以为订阅者提供指定主题上的最新状态(前提是最新消息发布时保留标志设置为true)。

保留消息是保留标志设置为true的普通MQTT消息

每个订阅带有保留消息的主题的客户端在订阅后都会立即接收保留消息

当客户端向指定主题发送多条保留消息时,代理仅存储最后的保留消息以及相应的QoS级别。

代理为每个主题仅存储一条保留消息

MQTT保活机制

MQTT保持活动机制是MQTT协议定义的一项功能。

MQTT客户端通过向代理发送为PINGREQ报文来维持与代理的连接。

MQTT代理通过接收PINGREQ来检测客户端是否无响应或断开连接,同理MQTT客户端通过接收PINGRESP响应来判断代理是否可用。

MQTT遗嘱

MQTT遗嘱(Last Will and Testament, LWT),允许客户端指定一条消息,在发生意外断开连接时,代理自动发布该消息到已订阅的其他客户端。

MQTT遗嘱 (LWT) 功能对于确保高效通信和在客户端意外断开时保持系统完整性至关重要。