1.MQTT的两位发明者为MQTT协议 规定了几个要求:
- 简单的实现
- 服务质量数据交付
- 轻量级和带宽效率
- 数据不可知论
- 持续的会话意识
该协议的主要重点已从专用的嵌入式系统转变为开放的物联网(IoT)用例。
2.MQTT不是传统的消息队列解决方案。
3.OASIS标准
OASIS是一个旨在推进标准的开放组织,2014,MQTT成为正式批准的OASIS标准。
最新:2019年,OASIS批准了新的MQTT 5 规范,这个新的 MQTT 版本为 MQTT 引入了新功能,
这些功能是部署在云平台上的 IoT 应用程序所需的,以及需要更高可靠性和错误处理以实现关键任
务消息传递的功能。
4.发布/订阅模式
提供了传统客户端-服务器架构的替代方案
发布/订阅模型将发送消息的客户端(发布者)与接收消息的客户端(订阅者)分离
它们之间的连接由第三个组件(代理)处理。
发布者与接收者(订阅者)的解耦,解耦的维度:
- 空间解耦:发布者和订阅者不需要相互了解(例如,不交换 IP 地址和端口)。
- 时间解耦:发布者和订阅者不需要同时运行。
- 同步解耦:两个组件的操作在发布或接收时不需要中断。
发布/订阅模型消除了消息发布者和接收者/订阅者之间的直接通信。代理的过滤活动可以控制哪个客户端/订阅者接收哪个消息。解耦包括三个维度:空间、时间和同步。
5.可扩展性
Pub/Sub 的扩展性比传统的客户端-服务器方法更好。
消息缓存和消息的智能路由通常是提高可扩展性的决定性因素。
尽管如此,扩展到数百万个连接是一个挑战。可以通过集群代理节点实现如此高水平的连接,以使用负载平衡器将负载分布到更多的单个服务器上。
6.消息过滤
pub/sub模式的broker有几个过滤选项:
- 选项1:基于主题的过滤
- 选项2:基于内容的过滤
- 选项3:基本类型的过滤
其中MQTT使用基于主题的消息过滤,每条消息都包含一个主题(主题),代理可以使用它来确定订阅客户端是否收到消息。
7.与消息队列的区别
关于 MQTT 的名称以及该协议是否作为消息队列来实现,存在很多混淆。MQTT是指IBM的MQseries产品,与“消息队列”无关。不管这个名字来自哪里,理解 MQTT 和传统消息队列之间的区别是很有用的:- 消息队列存储消息直到消息被消费 使用消息队列时,每条传入消息都存储在队列中,直到被客户端(通常称为消费者)接收。如果没有客户端接收到消息,消息将保持在队列中并等待被消费。在消息队列中,消息不可能不被任何客户端处理,就像在 MQTT 中没有人订阅主题一样。
- 一条消息只被一个客户端消费 另一个很大的区别是,在传统的消息队列中,一条消息只能被一个消费者处理。负载分布在队列的所有消费者之间。在 MQTT 中,行为完全相反:订阅主题的每个订阅者都会收到消息。
- 队列是命名的,必须显式创建 队列比主题严格得多。在使用队列之前,必须使用单独的命令显式创建队列。只有在队列命名和创建之后,才可以发布或消费消息。相比之下,MQTT 主题非常灵活,可以即时创建。