消息模型
支持发布/订阅消息模型,提供一对多的消息分发方式。这意味着一个发布者(发布消息的客户端)可以将消息发送到一个或多个订阅者(订阅相同主题的客户端),而不需要建立直接的点对点连接。
以下是MQTT的发布/订阅消息模型的关键特点:
- 主题(Topic): 发布者在发送消息时会将消息与一个主题相关联。主题是消息的分类或标识,它用于告诉Broker消息应该发送到哪些订阅者。订阅者可以选择订阅感兴趣的主题,以接收与这些主题相关的消息。
- 订阅(Subscribe): 订阅者告诉MQTT Broker它对哪些主题感兴趣。一旦订阅者订阅了特定主题,Broker会将匹配的消息发送给订阅者。订阅者可以同时订阅多个主题。
- 发布(Publish): 发布者将消息发送到特定主题,然后Broker负责将消息传递给所有订阅了该主题的订阅者。这样,消息可以广播给所有订阅者,实现了一对多的消息分发。
- 多对多通信: MQTT支持多对多通信,这意味着多个发布者可以同时发布消息到相同或不同的主题,多个订阅者可以同时订阅一个或多个主题。这种灵活性使MQTT适用于各种应用场景,包括物联网、实时通信和分布式系统。
- 通配符支持: MQTT还支持通配符订阅,订阅者可以使用通配符来匹配多个主题,从而接收与通配符模式匹配的消息。这提供了更高级别的消息过滤和选择性订阅。
总之,MQTT的发布/订阅消息模型使其成为一种非常灵活的消息传递协议,特别适用于需要一对多消息分发的应用,如物联网、实时监控、传感器数据采集等。它的轻量级特性和广泛的跨平台支持也使其成为了许多分布式系统和应用程序的首选通信协议之一。
QoS支持
提供三种级别 QoS支持
QoS0:At-Most-Once 允许消息少量丢失,最多传输一次
QoS1:At-Least-Once 确保消息一定到达,可少量重复
QoS2:Exactly-Once 有且仅有一次
QoS在发布和订阅时都可以设置,以控制消息的传递可靠性。需要注意的是,消息从发布者到订阅者之间是分两步的,所以要同时设置发布者和订阅者的QoS,以确保消息可靠地传递。
离线消息
MQTT协议支持离线消息传递,这允许终端在重新连接到MQTT服务器时获取未传递的消息。这对于许多业务场景都非常有用,特别是在物联网和实时通信中,当设备可能会断线并需要在重新连接后获取之前丢失的消息时。
以下是如何在MQTT中实现离线消息获取的一般步骤:
- 保留消息(Retained Messages): 在MQTT中,发布者可以标记消息为保留消息。保留消息会在Broker上保存,而不仅仅是传递给当前在线的订阅者。当一个新的订阅者订阅与保留消息相关的主题时,它会立即接收到该消息,即使该消息是在其离线期间发布的。
- 持久性会话(Persistent Session): MQTT客户端可以选择创建持久性会话,以便在断线后能够重新连接并获取未传递的消息。持久性会话会在服务器上保留客户端的订阅状态和未传递的消息。当客户端重新连接时,服务器将恢复其之前的订阅状态,并将任何未传递的消息发送给它。
- QoS级别(Quality of Service): 使用QoS级别1或2可以确保消息在传递时至少被传递一次,这有助于确保断线重连后能够获取未传递的消息。QoS级别2提供最高级别的消息传递保证。
- 持久订阅(Durable Subscription): 在MQTT中,客户端可以创建持久订阅,这允许它在断线后继续接收消息。持久订阅通常与持久性会话结合使用,以确保消息在离线期间不会丢失。
- 设置Clean Session标志: 当客户端连接到MQTT服务器时,可以设置"Clean Session"标志。如果设置为true,服务器将不会保留客户端的订阅状态和未传递的消息,这意味着客户端将从头开始,不会获取离线期间的消息。如果设置为false,则客户端可以获取离线期间的消息。
双向互通
分布式消息服务MQTT提供了一种松耦合的方式来处理终端设备生成的消息,终端消息按第一级主题分类存储至消息队列kafka,云端应用消费处理并进行指令下发。MQTT用于实时的设备-云端通信,而Kafka则用于消息的持久性存储和异步处理,确保即使云端应用不可用或者有高峰负载时,消息也不会丢失。
连接查询
设备连接信息、订阅关系、分组在线设备数的实时查询。
轨迹查询
提供设备维度的上下线轨迹的查询。
运维能力
在线连接、主题、订购关系、会话以及消息收发统计历史查询并提供指标的阈值设置,超过阈值进行告警提示。