消息传输协议MQTT

云起智控物联科技(武汉)有限公司
2022-10-05

MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,为此,它需要一个消息中间件 。

MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。

f09f2d82ff04ab0b82c91fd82ee4019d.jpeg


作为一种轻量级协议,MQTT 拥有简单紧凑的架构和较小的代码占用空间,适用于低成本、低功耗的IoT微控制设备。MQTT 可在 TCP/IP 协议上兼容运行,专攻延迟较高、质量不佳的网络环境。该协议适用于具有以下通信需求的应用:
使用极小带宽无线网络通信低功耗必要时保证高可靠性对处理和内存资源的需求很低

MQTT 在 IoT 多种应用中都备受青睐,如智能表计、资产追踪工具和工业设备的互联传感器。凭借对有限带宽的高效利用,因此MQTT非常适用于网络成本高、功耗大的应用场景,例如远程传感器阵列就需要在现场自主运行数年且期间无需维修。MQTT是多个客户端通过一个中央服务器传递信息的多对多协议,能高效地将信息分发给一个或多个订阅者,加之其代码占用空间小,便使得MQTT成为移动应用通信的理想之选。


MQTT特点

MQTT协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主要的几项特性:

1、使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合;

2、对负载内容屏蔽的消息传输;

3、使用 TCP/IP 提供网络连接;

4、有三种消息发布服务质量:

5、小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量;

6、使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制。

MQTT 功能概述

MQTT 基于发布和订阅模型,而非“客户端-服务器”模型,它具有两个功能实体——MQTT 服务器和 MQTT 客户端。IoT 网络上的任何“事物”,无论是硬件设备还是软件程序,都可以视为 MQTT的 客户端。所有的客户端并非直接向彼此发布或订阅消息,而是向MQTT 服务器所管理的“主题”来发布或订阅消息。“主题”可理解为电子邮件的收件箱;客户端向主题发布消息,订阅该主题的其他客户端都将收到该消息。

MQTT 服务器负责接收所有已发布的消息,并需要确保将其传输到所有订阅的客户端。消息根据多个商定的 QoS 级别进行发布(见下文)。服务器还将对网络上的所有 IoT 设备进行验证,进而管理连接、会话和订阅。

MQTT-SN

MQTT-SN 是 MQTT 的优化版本,专为需要提高数据传输效率和功耗效率的大规模无线传感器网络而设计。MQTT-SN 主要通过缩短主题 ID 的长度来提升数据传输效率。这些经过缩短处理的 ID 会编程到客户端和服务器中,从而减少信息传递数量。

MQTT-SN 中的“链路保持机制”允许设备进入睡眠模式,并在被唤醒时才可检索任何排队消息。

MQTT 核心概念

除了服务器和客户端实体,MQTT 和 MQTT-SN 运行还涉及到如下核心概念:

1.MQTT 主题 (MQTT Topics)

主题是 MQTT 实现对带宽高效利用的基础,它具有多级结构,如图 2 所示。MQTT 客户端只会订阅其所关注的主题,并且可以使用通配符条目来访问多个主题。

由于设备仅接收已订阅的主题消息,MQTT 主题通过 IoT 网络将更加高效地组织数据流,从而实现大规模应用。

2.连接(Connections)

MQTT 客户端必须与服务器建立连接才能发布或订阅消息。客户端在发送连接请求时会提供其客户ID、用户名和密码,随后服务器会确认该项请求。而连接请求也可使用如下参数加以限定:

2.1.MQTT会话(Clean Session) - 请求连接并删除订阅队列中已存储的任何消息。

2.2.链路保持(Keep Alive) - 当服务器或客户端未发送消息时,链路保持功能将优先确保设备连接的最长时间,从而为处于睡眠模式下的其他电池供电设备提供支持。在此期间,客户端接收到的任何消息都会由服务器存储,直到指定时间结束。

2.3.睡眠(仅限 MQTT-SN) - 在设备告知服务器即将进入睡眠模式时,服务器会在设备告知的时间段内将设备订阅的所有消息排入队列。此模式与“链路保持”模式的主要区别在于,服务器会无视QoS 级别,将所有消息进行存储,而在“链路保持”模式中则仅存储 QoS 1 和 QoS 2 消息。在睡眠模式时,客户端还能在不需要唤醒的情况下刷新其消息队列。

3.订阅

客户端可请求订阅一个或多个主题,该请求支持两种不同的通配符设置,如图 3a 和 3b 所示。

单级 (+) 通配符用于替换一个主题级别,因此“sensors/+/out”将订阅以下主题:

sensors/soil/out(传感器/土壤/输出)

sensors/water/out(传感器/水/输出)

sensors/light/out(传感器/光/输出)

多级 (#) 通配符用于替换多个主题级别,因此这个通配符可以订阅以下主题:

sensors/soil/out(传感器/土壤/输出)

sensors/soil/in(传感器/土壤/输入)

sensors/temperature/out(传感器/温度/输出)

4.消息服务质量QoS

MQTT 和 MQTT-SN 两者规定了消息服务质量 (QoS) 模式,让发布者能够自行定义消息质量。我们针对这些模式进行汇总(见表 1),并分享了如何根据特定应用的限制条件来采用不同的模式。

33d660b8fa541a9a4f4df6f2a207422c.jpeg

5.QoS 在发布与订阅中的区别

在MQTT 发布与订阅操作中, QoS 代表了不同的含义,发布时的 QoS 表示消息发送到服务端时使用的 QoS,订阅时的 QoS 则表示服务端向自己转发消息时可以使用的最大 QoS。

当客户端 A 的发布 QoS 大于客户端 B 的订阅 QoS 时,服务端向客户端 B 转发消息时使用的 QoS 为客户端 B 的订阅 QoS。

当客户端 A 的发布 QoS 小于客户端 B 的订阅 QoS 时,服务端向客户端 B 转发消息时使用的 QoS 为客户端 A 的发布 QoS。

结论

现如今,MQTT 已广泛应用于包括汽车、能源、制造业及电信等多个关键领域,尤其适用于更窄带宽的网络环境和更低功耗IoT设备。为简化IoT的开发流程,技术人员还可根据自身需求,选择包括服务器端与客户端在内的MQTT测试工具。

微消息队列MQTT版是阿里云推出的一款面向移动互联网以及物联网领域的轻量级消息中间件。如果说传统的消息队列中间件一般应用于微服务之间,那么适用于物联网的微消息队列MQTT版则实现了端与云之间的消息传递和真正意义上的万物互联。本文介绍微消息队列MQTT版的消息收发模型、产品优势和应用场景。

核心概念

Topic:消息主题,一级消息类型,生产者向其发送消息。

生产者:也称为消息发布者,负责生产并发送消息至Topic。

消费者:也称为消息订阅者,负责从Topic接收并消费消息。

消息:生产者向Topic发送并最终传送给消费者的数据。

规则:微消息队列MQTT版与其他阿里云产品实现数据互通的资源。

消息收发模型

微消息队列MQTT版主要包含以下两种消息收发模型:

终端与云端服务交互模型该模型中,微消息队列MQTT版将终端与云端连接起来,实现设备端和云端的双向通信。设备端通过微消息队列MQTT版可直接和云端的业务应用进行通信,也可和其他阿里云产品实现消息数据的跨产品互通。该模型的典型应用场景为智能设备的状态数据上报或云端控制应用的指令下发。

终端与终端交互模型

该模型适用于移动端App或者设备之间的数据通信,典型场景是IM通信场景中两个用户直接聊天消息,以及智能设备场景中App端控制智能设备。在该模型中消息的生产者和消费者都是分布在终端设备,通过MQTT协议连接到微消息队列MQTT版产品。


根据以上两种消息收发模型,可以将使用微消息队列MQTT版的开发人员分为终端和云端两大类。

优势

无缝迁移

兼容任何支持MQTT 3.1.1协议的SDK,支持WebSocket协议,覆盖绝大多数移动端开发平台及语言。

高性能

支撑千万级设备在线连接,消息百万级并发,万亿级流转,毫秒级推送;分布式架构设计,无单点瓶颈,各组件间均可无限水平扩展。

安全可靠

支持设备级权限控制,支持临时Token服务以及SSL/TLS传输加密通信,确保用户数据安全可靠。

天然互通

可以支持微消息队列MQTT版和消息队列RocketMQ版的消息互通,从而实现设备端和云端的双向打通,更高效、更可靠。

应用场景

微消息队列MQTT版拥有多协议、多语言和多平台的支持能力,且广泛应用于移动互联网以及物联网领域,覆盖移动直播、车联网、金融支付、智能餐饮、即时聊天等多种应用场景。

分享