文章字数:559,阅读全文大约需要2分钟
MQTT
是一个互联网协议,基于这个协议有很多的实现。
一、MQTT Broker的需求
1.1 基本需求
- 支持
mqtt3.1
/mqtt3.1.1
可选mqtt5.0
协议
3.1
和3.1.1
是常见的协议版本,几乎生产的IOT
设备都支持,5.0
普及可能还要一段时间。
- 支持
QOS0
、QOS1
可选QOS2
- 各大厂商至少都支持了
QOS1
,能够保证信息的必到达。
支持遗嘱信息:即设备异常断开后通知后端服务或者其他设备处理
支持持久化:比如
QOS1
的消息,设备因为网络原因接收不到或者异常断线,需要把未发送的信息保存在session
中。支持多种连接方式
MQTT over TCP
: 最基本的连接方式MQTT over Webscoket
: 基于Websocket
连接的MQTT
MQTT over TCP/SSL
: 基础连接之上做了加密,一般采用TLS
加密MQTT over Websocket/SSL
: 基于Websocket
的加密连接,一般SSL
采用TLS
- 集群
- 需要海量的连接需要支持集群,集群的
session
持久化和集群通信都是难点。 - 集群信息共享,可以保证某个节点宕机时功能还能正常使用,但是未发送的信息可能会丢失。
- 自定义权限验证
- 连接阶段是否允许连接
- 发送阶段判断是否允许发送
- 订阅阶段是否允许订阅
- 大部分开源
Broker
只支持userName
和Password
的验证。ClientId
和Ip
不一定支持
1.2 可选需求
- 保留信息
- 保留信息就是主题会依照
QOS
级别保留最后一条消息,当有新的订阅时会发送这条消息 - 主要应对订阅之后不知道第一条信息何时会发送的情况。如获取设备状态,设备如果不发送信息新加进来的管理端就无法获得状态信息,不知道如何显示。如果这个时候有一条保留信息,就能够知道当前设备状态。
- 开销较大,每次订阅主题都需要检查有没有保留消息。