聊聊 MQTT:物联网的“普通话”

你有没有想过,智能家居里的设备之间是怎么"聊天"的?比如,温度传感器检测到室温过高,是怎么通知空调自动打开的?又或者,你的手机 APP 是怎么远程控制花园里的喷灌系统的?

这些设备往往来自不同厂商,运行在不同的硬件平台上,使用不同的编程语言开发。让它们高效、可靠地相互通信,并不是一件容易的事。而 MQTT 协议,正是为了解决这类问题而生的。

什么是 MQTT?

MQTT 的全称是 Message Queuing Telemetry Transport (消息队列遥测传输协议)。名字听起来很唬人,但它的设计目标其实非常朴素:用最少的带宽和电量,在不可靠的网络环境下,实现设备间的可靠通信

它诞生于 1999 年,由 IBM 的安迪·斯坦福-克拉克(Andy Stanford-Clark)和阿兰·尼普(Arlen Nipper)共同发明。最初的应用场景是石油管道监控------设备位于沙漠深处,网络带宽极其有限,而且经常断线。是不是很像今天的物联网场景?

2014 年,MQTT 成为了正式的 OASIS 标准,后来又被 ISO/IEC 采纳为国际标准。如今,从 AWS IoT、Azure IoT Hub 到 Home Assistant、开源项目如 EMQX,到处都能看到它的身影。

最核心的三个角色

MQTT 采用了一种被称为 发布/订阅(Publish/Subscribe)的架构,这和我们熟悉的 HTTP "请求/响应" 模式(客户端问、服务器答)有很大不同。

它主要涉及三个角色:

  1. 发布者(Publisher):负责发送消息的设备。每个发布者只需要把消息发到一个"中间人"那里就行,它不需要知道谁会收到这条消息,也不关心有多少人会收到。

  2. 订阅者(Subscriber):负责接收消息的设备。订阅者告诉"中间人",自己对哪类消息感兴趣,然后当有这类消息到来时,它就会收到通知。

  3. 代理(Broker):这是 MQTT 的核心,也就是那个"中间人"。它负责接收所有发布者的消息,并根据订阅关系,把消息准确地分发给所有订阅者。

发布者和订阅者的角色并不是固定的。同一个设备完全可以既发布消息(比如上报温度),也订阅消息(接收控制指令)。

这种设计带来了一个巨大的好处:解耦。发布者和订阅者完全不需要知道彼此的存在,也不需要同时在线。发布者可以把消息发给 Broker 就转身离开,订阅者也可以等自己上线之后再去 Broker 取消息。这让系统变得非常灵活,扩展起来也特别方便。

Topic:消息的"门牌号"

Broker 怎么知道要把消息发给谁呢?全靠 Topic

Topic 是一个用斜杠分隔的字符串,定义了一条消息属于哪个"主题"。例如:

  • home/livingroom/temperature

  • factory/machine-01/status

  • vehicle/tesla/model3/battery

订阅者可以订阅一个精确的 Topic,比如只订阅 home/livingroom/temperature。也可以使用通配符来订阅一批 Topic:

  • +:单层通配符。订阅 home/+/temperature 会收到 home/bedroom/temperaturehome/livingroom/temperature,但不会收到 home/livingroom/light/sensor

  • #:多层通配符。订阅 home/# 会收到 home/ 下的所有主题,包括 home/bedroom/temperaturehome/bedroom/light/status

通过灵活设计 Topic 的层级结构,你可以像设计文件目录一样,清晰地组织成千上万个设备的消息。

QoS:可靠的代价

物联网网络是出了名的不稳定。Wi-Fi 会断,4G 信号会弱,设备可能会突然掉电。MQTT 通过 QoS(Quality of Service,服务质量) 等级来处理这个问题,确保消息能可靠送达。

QoS 分为三个等级:

  • QoS 0:至多一次。消息发出去就不管了,不管收没收到。像"实时股票行情"这种丢一两条也没关系的场景可以用它,效率最高。

  • QoS 1:至少一次。Broker 和客户端会相互确认,保证消息至少送达一次,但可能重复送达。客户端需要自己处理重复消息。

  • QoS 2:恰好一次。通过两次请求-确认的握手,确保消息既不丢也不重。这是最安全、但也最耗资源的方式,适用于计费、指令等不允许出错的场景。

相关推荐
DS小龙哥1 小时前
基于物联网设计的室内环境监测系统(从0讲解如何接入涂鸦智能平台)
物联网
数字新视界7 小时前
信创动环监控品牌的技术架构及应用解析
数据库·物联网·需求分析·机房管理·动环监控
牛马工作号7 小时前
Zigbee 专业详解:从协议到排障
网络·物联网·安全
延凡科技7 小时前
智慧燃气解决方案:管道煤气监管应用管理系统(三维GIS+IoT+大数据落地实战)
大数据·人工智能·科技·物联网·安全
microrain9 小时前
从硬编码到热插拔:SagooIoT插件架构如何打破物联网平台的扩展瓶颈
物联网·golang·开源·sagooiot
MetrixAeroCore10 小时前
燃气报警器物联网卡遇2G/3G基站退网 全新低功耗网络替换迁移方案
物联网
微石科技12 小时前
长期慢病如何做好居家管理?宁波微石科技星梦云康改善周期数据零散短板
大数据·科技·物联网·算法
wuyk5551 天前
59.嵌入式C语言高级宏定义实战:多行宏、字符串化与符号拼接
c语言·开发语言·stm32·单片机·嵌入式硬件·物联网·51单片机
武汉万象奥科1 天前
万象奥科OpenHarmony 6.1 LTS适配完成,RK3576核心板再添新生态
arm开发·嵌入式硬件·物联网·rk3576·arm核心板
TDengine (老段)1 天前
TDengine 免费版说明
java·大数据·数据库·物联网·时序数据库·tdengine