物联网 MQTT协议
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)是一种轻量级的发布/订阅模式网络协议
它诞生于1999年,最初用于石油管道的卫星通信(带宽极低、延迟极高),后来在物联网(IoT)领域大放异彩,现已成为物联网最主流的通信协议之一
参考网址
应用场景
- 🌐智能家居
海量设备(智能音箱、控制中枢、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技术栈项目,可极大简化集成代码