MQTT 介绍
(Message Queuing TelemetryTransport, 消息队列遥测传输)
- 是IBM推出的一种针对移动终端设备的基于TCP/IP的发布/订阅协议
- 可以连接大量的远程传感器和控制设备,MQTT的特点是可以保持长连接, 具有一定的
实时性 - 云端向设备端发送消息, 设备端可以在最短的时间内接收到并作出响应
- MQTT更适合需要实时控制的场合, 尤其适合执行器
- 要保持长连接, 那么就要时不时地发送心跳包, 这就不会省电
- 低功耗的场合并不适合MQTT
- MQTT的长连接需要建立在TCP的基础上,TCP协议的复杂性决定了对设备的要求相比UDP更高一些
MQTT协议特性
1、使用发布/订阅消息模式, 提供一对多的消息发布, 解除应用程序耦合
2、有三种消息发布服务质量(QoS0、 QoS1、 QoS2)
- “ 至多一次” , 消息发布完全依赖底层 TCP/IP 网络, 会发生消息丢失或重复, 这一级别可用于对采集数据要求不严格的情况
- “ 至少一次” , 确保消息到达, 但消息可能会重复发生
- “ 只有一次” , 确保消息只到达一次,这一级别可用于要求严格如涉及计费系统的情况, 消息重复或丢失都是不允许的
3、小型传输, 开销很小( 固定长度的头部是2字节) , 协议交换最小化, 以降低网络流量
4、使用Last Will和Testament特性通知有关各方客户端异常中断的机制
5、允许用户动态创建主题, 零运维成本
6、把低带宽、 高延迟、 不稳定的网络等因素考虑在内
7、假设数据不可知, 不强求传输数据的类型与格式, 保持灵活性
8、官网: http://mqtt.org/
MQTT协议中心是MQTT服务器或代理(broker)
- 用户可以使用MQTT构建一个传感器网络,其中各种传感器都能够以其传感器独有的消息形式发布传感器值,订阅程序能够订阅不同的消息, 以据此采取措施,MQTT代理将处理从发布程序到订阅程序的转发消息。
- MQTT服务器除了收集转发数据, 还可以进行数据处理和存储, 例如, 实时存储共享单车车辆运行位置、 电池用量、 状态信息等数据, 以及对总体的车辆数据进行计算和统筹管理, 甚至为一些聊天工具提供平台服务。
MQTT主题模式:
1、MQTT是通过主题对消息进行分类的
2、主题本质上就是一个UTF-8的字符串
3、主题可以通过反斜杠表示多个层级关系
4、主题并不需要创建, 直接使用就是了
5、主题还可以通过通配符进行过滤
- + 可以过滤一个层级
- *只能出现在主题最后表示过滤任意级别的层级
举个例子:
- building-b/floor-5: 代表B楼5层的设备
- +/floor-5: 代表任何一个楼的5层的设备
- building-b/*: 代表B楼所有的设备
MQTT中有3个角色:
- 发布者Publisher
- 订阅者Subscriber
- 代理Broker
MQTT这种结构替代了传统的客户端/服务器模型,可以实现以下解耦:
- 空间解耦, 发布者和订阅者不需要知道对方
- 时间解耦, 发布者和订阅者不需要同时运行( 离线消息)
- 同步解耦, 发布和接收都是异步通讯, 无需停止任何处理