作者 | 王映月,单位:中国移动智慧家庭运营中心
Labs 导读
目前MQTT协议被广泛应用于自动驾驶、工业、通信等领域。而在智能家居领域市场上,中国移动、华为、阿里、腾讯等多家IoT平台都支持MQTT协议接入。本文将详细介绍MQTT协议的特点、如何运作等相关问题。
MQTT是结构化信息标准促进组织(OASIS,Organization for the Advancement of Structured Information Standards)标准下的物联网消息传递协议,其轻量级的发布/订阅传输机制,非常适合为远程连接设备提供可靠的消息通信服务。目前MQTT协议被广泛应用于自动驾驶、工业、通信等领域。而在智能家居领域市场上中国移动、华为、阿里、腾讯等多家IoT平台都支持MQTT协议接入。
Part 01MQTT协议的特点
- 轻量高效
只需极少的资源即可实现MQTT客户端,这使得MQTT协议可以轻松地在微型芯片上运行。极简报文设置实现最小网络开销。
- 范围广播
轻松实现百万设备消息广播。
- 稳定传输
3种消息传输保障等级,提供不同场景下消息传递的可靠性保证。
- 弱网支持
会话保持机制减少弱网环境下设备重连时间。
- 安全保障
支持多种认证协议保障消息安全
Part 02MQTT协议是怎么工作的 ●
MQTT协议定义了消息代理节点(Broker)及MQTT客户端(Client),两种网络实体类型。Broker接收Client发送的消息并负责转发这些消息到指定的Client。Client是能与Broker产生交互的任何实体,负责发送与接收消息。常见的Client比如IoT传感器,云端服务器。可见在MQTT协议中消息是通过Broker进行转发的,而不是由一个Client与另一个Client直接连接通信。为了区分,我们可以把Client定义为消息发送者(Publisher-Client)与消息接收者(Subscriber-Client)。
- Client与Broker建立连接,该连接可以是一个TCP/IP连接,也可以是一个加密的TLS连接。
- Subscriber-Client订阅一个主题(Topic)。
- Publisher-Client发送某个Topic消息到Broker。
- Broker将该条消息转发给所有订阅该Topic的Subscriber-Client。
Part 03MQTT协议质量保障
众所周知,物联网设备往往处在复杂的网络环境下,比如农业物联网中,蔬菜大棚的传感器设备;工业物联网中,封闭车间的温湿度传感器等等。在这些复杂网络场景下,设备状态是无法确定的,为了在这些场景下保障连接,MQTT协议提供了消息服务质量保障等级(Qos,Quality of Service levels)。
- Qos-0最多一次
Qos 0 保障消息到达终点最多不超过1次。消息可能到达1次或根本不会到达。适用于功率受限设备,可以最大减少传播时间,减少消息传递成本;适用于非关键消息传递,例如被频繁重复发送的消息。
- Qos-1 最少一次
Qos 1保障消息到达终点最少不低于1次。Broker在确认接收消息后会返回一个PUBACK消息给到Publisher-Client。如果消息发送失败,Publisher-Client将在一段时间后重发消息。此类型消息适用于重要不可丢失的消息传递,可利用该传输机制保证消息在离线设备上线后仍能收到。Subscriber-Client需要做好重复消息处理工作。
- Qos-2 只有一次
Qos 2 保障消息到达终点只有1次。此类消息保证接接收端对于一条消息只接收一次,是MQTT协议中最安全且传输速度最慢的一种消息传递形式。适用于十分重要且不允许重复消息出现的场景使用,由于消息十分重要,因此可忽视额外的网络开销。
Part 04最小MQTT应用搭建
在了解MQTT理论基础概念后,我们一起在Windows系统上搭建一个最小MQTT服务,实现MQTT消息的发送及订阅。
(1) Broker搭建
我们选择开源代理平台Mosquitto作为此次最小MQTT应用的单点Broker。
将Mosquitto Windows版下载完成后,通过Windows系统终端打开mosquitto.exe文件。输入./mosquitto.exe -p 1883 即在Windows系统上启动了一个MQTT服务,监听地址为127.0.0.1,端口是1883。
(2) Client搭建
完成Broker搭建后,我们还需要Client实现消息的发送和订阅。我们选择mqtt.fx软件作为此次最小MQTT应用的Client。打开mqtt.fx软件,我们通过设置MQTT Broker Address为127.0.01,Broker Port为1883,并自定义Client ID。完成设置后,点击主页面的Connect,页面右上角的连接指示灯显示为绿色即表示完成了连接,此时我们实现了Client到Broker的连接。
(3) 消息订阅
假定步骤二创建的Client为一个Subscriber-Client,此时通过点击主页面中的Subscribe,填写订阅Topic信息,在示例中我订阅的Topic为test,即可完成该Client对于该Topic订阅。
(4) 消息发送
重新打开一个mqtt.fx客户端,创建一个Publisher-Client,设置MQTT Broker信息与Subscriber-Client信息一致,成功连接Broker后,在Publish页面下,向指定Topic即test发送信息,此时我们可以在Subscriber-Client界面上看到消息成功的从Broker转发至Subscriber-Client。
至此一个最小的MQTT应用就搭建完成了。
综上所述,MQTT协议关注于消息,拥有轻量、高效、低开销等特性,相对于HTTP等广泛应用于互联网场景的协议来说,MQTT协议与物联网通信领域更加契合。