物联网 MQTT协议
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)是一种轻量级的发布/订阅模式网络协议
它诞生于1999年,最初用于石油管道的卫星通信(带宽极低、延迟极高),后来在物联网(IoT)领域大放异彩,现已成为物联网最主流的通信协议之一
参考网址
- MQTT协议[https://mcxiaoke.gitbook.io/mqtt]
应用场景
- 🌐智能家居
海量设备(智能音箱、控制中枢、APP)通过MQTT进行无缝通信和交互控制
- 🏭 工业物联网 (IIoT):
实现设备状态实时监控、故障预警、提升效率。如三一重工通过MQTT监控设备,故障预测准确率达90%,并用于压力、流量等远程监测
- 🚗 车联网:
连接车辆与云平台,实现车辆数据的实时上报、远程控制和导航更新等车内车载通信
- 🏙️ 智慧城市:
用于城市大脑等大型数据平台,整合环境、交通、能源等各类数据。例如,在智慧水务中跟踪水质并即时告警
- 🚜 智慧农业:
连接传感器监测土壤温湿度、光照等数据,实现精准灌溉和农业自动化管理
- 📱 移动应用与消息推送:
利用其长连接和低功耗特性,实现可靠、省电的移动端消息推送
MQTT协议和同类比较
| 协议 | 一句话定位 | 传输协议 | 通信模型 | 消息开销 | 资源占用 | 可靠性 | 安全性 | 典型场景 |
|---|---|---|---|---|---|---|---|---|
| MQTT | 轻量物联网消息传输 | TCP | 发布/订阅 | 极小(2字节头) | 低 | 强(3种QoS) | 依赖TLS | 物联网、车联网 |
| CoAP | 为微型设备设计的协议 | UDP | 请求/响应 | 小(4字节头) | 极低 | 有限(UDP基础) | 内置DTLS | 智能家居、传感器 |
| AMQP | 企业级消息队列协议 | TCP | 发布/订阅、点对点等 | 较大 | 高 | 强(金融级) | 原生SASL/TLS | 金融、系统集成 |
| XMPP | 即时通讯协议(XML) | TCP | 发布/订阅、请求/响应 | 最大(文本) | 高 | 中 | 支持TLS | 聊天、在线客服 |
| HTTP | Web基础协议 | TCP | 请求/响应 | 较大(文本) | 较高 | 有保障 | 原生TLS | 网站、REST API |
MQTT和Protobuf区别
| 特性 | MQTT | Protobuf |
|---|---|---|
| 首要职责 | 消息传输协议 (How to talk) 定义了消息如何在网络中进行交换的规则和流程 | 数据序列化格式 (What to say) 定义了数据如何被组织和编码成二进制格式,以便高效存储或传输 |
| 核心目标 | 轻量、高效、可靠地在受限网络和低功耗设备间传递消息 | 高效地序列化和反序列化结构化数据,追求数据体积小、处理速度快 |
| 工作层面 | 位于应用层,是一个独立的消息协议 | 是一种数据表示方法,需要依附于如MQTT的传输协议使用 |
| 数据形式 | 消息的“信封”,其Payload(消息体)可以是任意二进制或文本数据 | 消息的“内嵌物”,对Payload中的具体内容进行二进制压缩和编码 |
| 核心概念 | 客户端、Broker服务器、主题(Topic)、发布/订阅模式 | .proto schema定义文件、代码生成、序列化/反序列化 |
| 典型应用 | 物联网设备与云端之间的指令下发与数据上报 | 微服务间通信、大数据存储、跨语言数据交换,特适内部系统通信 |
Protobuf同类比较
| 分类 | 方案 | 一句话特点 | 适用场景 |
|---|---|---|---|
| 文本格式 | JSON | 人类可读,无需Schema,生态最广 | Web API、配置文件、调试 |
| 类二进制 | MessagePack / CBOR | 二进制版JSON,自描述,比JSON小 | 日志、缓存、灵活交换 |
| 强模式二进制 | Protobuf | 体积小、速度快,强Schema跨语言 | gRPC、微服务、性能敏感系统 |
| Avro | 数据紧凑,模式随数据存储,动态解析 | Kafka、大数据、模式频繁变动 | |
| Thrift | 完整RPC框架,含多种序列化协议 | 跨语言RPC服务 | |
| 零拷贝二进制 | FlatBuffers | 直接访问数据,无需解析 | 游戏、高性能计算 |
| Cap'n Proto | 极致速度,零拷贝 | 分布式高性能应用 |
基于java相关MQTT框架
| 框架名称 | 核心特点与优势 | 适用场景 (Project Level) |
|---|---|---|
| Eclipse Paho | Java官方参考实现,完全遵循MQTT标准,社区庞大、稳定可靠 | 首选适用于绝大多数需要MQTT通信的Java项目 |
| HiveMQ MQTT Client | 高性能、API设计优雅(同步/异步/响应式),支持MQTT 5.0和背压控制 | 对性能、吞吐量有高要求的复杂项目 |
| Mica-MQTT | 国产开源,基于Java AIO,简单易用、低延迟、高性能 | 希望简化自研难度,并追求高性能应用的国产化项目 |
| Spring Integration MQTT | 与Spring框架无缝集成,通过配置适配器(Adapter)即可实现MQTT通信 | Spring技术栈项目,可极大简化集成代码 |
