MQTT-概念:什么是 MQTT

330 阅读2分钟

TCP/IP 模型分为四层,应用层,传输层,网络层,网络接口层 MQTT 是属于应用层,所以只要是支持 TCP/IP 协议栈的地方,都可以支持使用 MQTT MQTT 是一种消息队列传输协议。

订阅者只需要关注订阅的消息,不接收其他非订阅的消息,这样可以避免无效数据造成的存储与处理。 服务器只需要和中间转发的 broker 进行数据交互,再由终端订阅 broker 中间服务提供一对多的消息发布。服务器不再和终端直接建立 1 对 1 的连接,解除应用程序的耦合。

MQTT 区分消息服务质量:

QOS=0 只发送一次,不关注是否送达,适用于非必要连续性消息。

QOS=1 至少一次,确保消息送达,但有可能发生重复。适用于 == ?

QOS=2 只有一次,确保消息只送达一次,例如计费支付系统中会用到该级别,避免消息重复,并且保证消息唯一,确保结果正确。还可以用于微信类的 IM 通讯。

为什么 MQTT 开销很小:

每条消息头的长度固定是 2 字节,节省网络流量,节省数据容量

其余 playload 属于业务数据 。

MQTT 协议中 分为三个部分:

发布者 Publish 一般是客户端(业务服务 也算客户端),

代理 Broker 消息代理中间件转发服务器,

订阅者 Subscribe 一般指终端(它也能 Publish)

Mqtt消息分为

主题 topic ,

负载 payload 两部分 topic 可以理解为消息类型,

订阅者订阅topic后,就会收到topic 对应的消息内容(payload)

payload 可以理解消息的内容,是指订阅者具体要使用的内容。

MQTT 基本订阅与发布的消息流程:

终端 A 连接到 broker 。终端 B 连接到 broker,并且订阅主题 topic1。 终端 A此时发布了一条消息主题为 topic1给 broker; 这会 broker 收到了终端 A 的发布消息 topic1,发现终端 B 已经订阅了 topic1,那么就会将消息转发给终端 B; 终端 B 就会从 broker 收到这条消息了。 如果终端 B 在终端 A 发布之后才订阅的 topic1,那么这会终端 B 就收到不到该条消息了。