APP下载

一文读懂物联网的灵魂MQTT

消息来源:baojiabao.com 作者: 发布时间:2026-05-19

报价宝综合消息一文读懂物联网的灵魂MQTT

名词释义:

MQTT——Message Queuing Telemetry Transport讯息伫列遥测传输

SUB——Subscribe订阅

PUB——Publish释出

QoS——Quality of Service服务质量

LWT——Last Will & Testament最后遗嘱

MQTT简介

MQTT是一种 基于TCP/IP的机器之间通讯 machine-to-machine (M2M)、物联网 Internet of Things (IoT)常用的一种轻量级讯息传输协议。适用于网络带宽较低的场合。包含释出、订阅模式,通过一个代理服务器(broker),任何一个客户端(client)都可以订阅或者释出某个主题的讯息,然后订阅了该主题的客户端则会收到该讯息。

MQTT系统由与服务器(通常称为“代理”)通讯的客户端组成。客户端可以是资讯的释出者,也可以是订阅者。每个客户端都可以连线到代理服务器。

讯息Topic按主题层次组织。释出者有新的资料项要释出时,它会将包含资料的控制讯息传送到连线的代理服务器。然后代理服务器将资讯分发给订阅该主题的任何客户端。释出服务器不需要对订阅服务器的数量或位置进行任何资料配置,订阅服务器也不必配置任何有关释出服务器的资料。

3.1 释出/订阅

释出/订阅,通常也被成为 pub-sub 模式是 MQTT 的核心,除了基于同一个讯息代理的释出者和订阅者之外,还有一些其它节点围绕着该讯息代理呈星型拓扑分布。

客户端可以释出或订阅特定的主题(topic,有些类似资讯主题),根据使用它们的讯息代理来决定谁会收到资讯。MQTT 的主题有特定的语法,使用斜杠(/)作为分隔符,整体呈层次结构,类似 URL 中的路径格式。

3.2 万用字元

MQTT 中有两个可用的万用字元,分别是+和#,+表示匹配单一层级中的任意主题,#表示匹配任意数量的层次。

3.3 服务质量(QoS)

MQTT 的设计初衷是为了在不可靠的网络中运作良好,为不同的场景提供了三个级别的服务质量,允许客户端指定自己想要的可靠性级别。

3.3.1 QoS Level 0:至多一次

这是最简单的级别,无需客户端确认,其可靠性与基础网络层 TCP/IP 一致。

3.3.2 QoS Level 1:至少一次,有可能重复

确保至少向客户端传送一次资讯,不过也可传送多次;在接收资料包时,需要客户端返回确认讯息(ACK 包)。这种方式常用于传递确保交付的资讯,但开发人员必须确保其系统可以处理重复的资料包。

3.3.3 QoS Level 2:只有一次,确保讯息只到达一次

这是最不常见的服务质量级别,确保讯息传送且仅传送一次。这种方法需要交换4个数据包,同时也会降低讯息代理的效能。由于相对比较复杂,在 MQTT 实现中通常会忽略这个级别,请确保在选择数据库或讯息代理前检查这个问题。

3.4 “临终遗嘱”资讯

MQTT提供了检测方式,利用KeepAlive机制在客户端异常断开时发现问题。因此当客户端电量耗尽、崩溃或者网络断开时,讯息代理会采取相应措施。

客户端会向任意点的讯息代理发送“临终遗嘱”(LWT)资讯,当讯息代理检测到客户端离线(连线并未关闭),就会发送储存在特定主题上的 LWT 资讯,让其它客户端知道该节点已经意外离线。

3.5保留讯息 Retained Messages

MQTT中无论是释出还是订阅都不会有任何触发事件。

1个Topic只有唯一的retain讯息,Broker会储存每个Topic的最后一条retain讯息。

释出讯息时把retain设定为true,即为保留资讯。每个Client订阅Topic后会立即读取到retain讯息。如果需要删除retain讯息,可以释出一个空的retain讯息,因为每个新的retain讯息都会覆盖最后一个retain讯息。

2020-01-01 21:52:00

相关文章