MQTT(MQ Telemetry Transport)是一种基于发布/订阅模式的轻量级消息传输协议,专门针对低带宽和不稳定网络环境的物联网应用而设计,可以用极少的代码为联网设备提供实时可靠的消息服务。
MQTT是机器对机器(M2M)/物联网(IoT)连接协议。
MQTT 协议广泛应用于物联网、移动互联网、智能硬件、车联网、智慧城市、远程医疗、电力、石油与能源等领域。
在 MQTT 3.1.1 发布并成为 OASIS 标准的四年后,MQTT 5.0 正式发布。这是一次重大的改进和升级,它的目的不仅仅是满足现阶段的行业需求,更是为行业未来的发展变化做了充足的准备。
MQTT 5.0 在 3.1.1 版本基础上增加了会话/消息延时、原因码、主题别名、用户属性、共享订阅等更加符合现代物联网应用需求的特性,提高了大型系统的性能、稳定性与可扩展性。目前,MQTT 5.0 已成为绝大多数物联网企业的首选协议,我们建议初次接触 MQTT 的开发者直接使用该版本。
MQTT v5.0现在成为了OASIS官方标准:
OASIS已经发布了官方的MQTT v5.0标准 - 这对于已经为物联网(IoT)所用的消息传输协议来说,这是一个改进和功能的巨大飞跃。基于早期的v3.1.1标准,它具有重要的更新,同时最大限度地减少与现有版本的不兼容性。
新版本的亮点包括:
在如此大规模的物联网需求下,海量的设备接入和设备管理对网络带宽、通信协议以及平台服务架构都带来了巨大的挑战。对于物联网协议来说,必须针对性地解决物联网设备通信的几个关键问题:网络环境复杂而不可靠、内存和闪存容量小、处理器能力有限。
MQTT 协议正是为了应对以上问题而创建,经过多年的发展凭借其轻量高效、可靠的消息传递、海量连接支持、安全的双向通信等优点已成为物联网行业的首选协议。
所以,随着物联网(IoT)的快速发展,MQTT协议被许多公司和开发人员广泛使用。
了解 MQTT 的工作原理,首先需要掌握以下几个概念:
MQTT 基于发布订阅模式,它解耦了消息的发送方(发布者)和接收方(订阅者),引入了一个中间代理的角色来完成消息的路由和分发。
发布者和订阅者不需要知道彼此的存在,他们之间唯一的联系就是对消息的一致约定,例如消息将使用什么主题、消息将包含哪些字段等等。这让 MQTT 的通信更加灵活,因为我们可以随时动态地增加或减少订阅者和发布者。
通过发布订阅,我们可以轻易地实现消息的广播、组播和单播。
关于 MQTT 发布订阅模式的更多介绍,我们可以参考 MQTT 系列博客中的 发布订阅模式介绍:https://www.emqx.com/zh/blog/mqtt-5-introduction-to-publish-subscribe-model
在发布消息的客户端和订阅的客户端之间充当中介,将所有接收到的消息转发到匹配的订阅客户端。所以有时我们也会直接将服务端称为 Broker。
MQTT Broker 是负责处理客户端请求的关键组件,包括建立连接、断开连接、订阅和取消订阅等操作,同时还负责消息的转发。一个高效强大的 MQTT Broker 能够轻松应对海量连接和百万级消息吞吐量,从而帮助物联网服务提供商专注于业务发展,快速构建可靠的 MQTT 应用。
使用 MQTT 协议连接到 MQTT 服务端的设备或应用程序。它既可以是发布者,也可以是订阅者,也可以具备这两种身份。
任何运行 MQTT 客户端库的应用或设备都是 MQTT 客户端。例如,使用 MQTT 的即时通讯应用是客户端,使用 MQTT 上报数据的各种传感器是客户端,各种 MQTT 测试工具也是客户端,比如:MQTTX客户端工具。
MQTT 协议根据主题来转发消息。主题被用来标识和区分不同的消息,它是 MQTT 消息路由的基础。
发布者可以在发布时指定消息的主题,订阅者则可以选择订阅自己感兴趣的主题来接收相关的消息。
主题通过 / 来区分层级,类似于 URL 路径。例如:
chat/room/1
sensor/10/temperature
sensor/+/temperature
MQTT 主题支持以下两种通配符:+ 和 #。
注意:
通配符主题只能用于订阅,不能用于发布。
关于 MQTT 主题的更多详情,请参阅文章通过案例理解 MQTT 主题与通配符:https://www.emqx.com/zh/blog/advanced-features-of-mqtt-topics
MQTT 定义了三种 QoS 等级,来分别保证在不同网络环境下的消息可靠性。每条消息都可以在发布时独立设置自己的 QoS。
QoS 越大,消息的传输复杂程度也越高,我们需要根据实际场景来选择合适的 QoS。
关于 MQTT QoS 的更多详情,请参阅文章 MQTT QoS 0, 1, 2 介绍:https://www.emqx.com/zh/blog/introduction-to-mqtt-qos
了解了 MQTT 的基本组件之后,让我们来看看它的一般工作流程:
更多信息查看官方文档。
– 求知若饥,虚心若愚。