什么是MQTT

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的轻量级协议,该协议构建于TCP/IP协议之上。

MQTT特征

  • 基于 TCP 协议的应用层协议;
  • 采用 C/S 架构;
  • 使用订阅/发布模式,将消息的发送方和接受方解耦;
  • 提供 3 种消息的 QoS(Quality of Service): 至多一次,最少一次,只有一次;
  • 收发消息都是异步的,发送方不需要等待接收方应答。

与传统MQ的区别

虽然 MQTT 协议名称有 Message Queue 两个词,但是它并不是一个像 RabbitMQ 那样的一个消息队列,MQTT 跟传统的消息队列相比,有以下一些区别:

  • 在传统消息队列中,在发送消息之前,必须先创建相应的队列;在 MQTT 中,不需要预先创建要发布的主题(可订阅的 Topic);
  • 在传统消息队列中,未被消费的消息总是会被保存在某个队列中,直到有一个消费者将其消费;在 MQTT 中,如果发布一个没有被任何客户端订阅的消息,这个消息将被直接扔掉;
  • 在传统消息队列中,一个消息只能被一个客户端获取,在 MQTT 中,一个消息可以被多个订阅者获取,MQTT 协议也不支持指定消息被单一的客户端获取。

MQTT通讯模型

MQTT 的通信是通过发布/订阅的方式来实现的,消息的发布方和订阅方通过这种方式来进行解耦,它们没有直接地连接,它们需要一个中间方(Broker)。
MQTT入门

  • 发布方(Publisher)将消息发送到 Broker;
  • Broker 接收到消息以后,检查下都有哪些订阅方订阅了此类消息,然后将消息发送到这些订阅方(subscriber);
  • 订阅方(subscriber)从 Broker 获取该消息;

MQTT Client

任何终端,只要运行了 MQTT 的库或者代码,我们都可以将其称为 MQTT 的 Client,一个 Client 可以同时是 Publisher 和 Subscriber。

MQTT Broker

Broker 负责接收 Publisher 的消息,并发送给相应的 Subscriber,它是整个 MQTT 订阅/发布的核心,具有以下功能:

  • 可以横向扩展,比如集群,来满足大量的 Client 接入;
  • 可以扩展接入业务系统;
  • 易于监控,满足高可用性。

MQTT协议数据包的固定包头

名称 方向 描述
Reserved 0 不可用 保留位
CONNECT 1 Client 到 Broker Client 请求连接到 Broker
CONNACK 2 Broker 到 Client 连接确认
PUBLISH 3 双向 发布消息
PUBACK 4 双向 发布确认
PUBREC 5 双向 发布收到
PUBREL 6 双向 发布释放
PUBCOMP 7 双向 发布完成
SUBSCRIBE 8 Client 到 Broker Client 请求订阅
SUBACK 9 Broker 到 Client 订阅确认
UNSUBSCRIBE 10 Client 到 Broker Client 请求取消订阅
UNSUBACK 11 Broker 到 Client 取消订阅确认
PINGREQ 12 Client 到 Broker PING 请求
PINGRESP 13 Broker 到 Client PING 应答
DISCONNECT 14 Client 到 Broker Client 主动中断连接
Reserved 15 不可用 保留位

相关文章: