你好,这里是网络技术联盟站。
今天跟大家聊一下物联网协议中比较著名的协议:MQTT。
让我们直接开始!
什么是MQTT?
- 英文全称:Message Quueuing Telemetry Transport
- 中文术语:消息队列遥测传输协议
- 一种适用于物联网设备之间通信的简单消息传递协议
- 专为带宽受限的设备而设计
- 采用发布/订阅通信模式
- 用于机器对机器 ( M2M ) 通信
- MQTT 协议基于OASIS 标准下的TCP/IP
- 被广泛用于无线网络通信,具有广泛的覆盖面,涵盖医疗保健、汽车和其他使用物联网应用的行业。
MQTT的历史
MQTT 最初由 Andy Stanford-Clark 博士和 Arlen Nipper 博士于 1999 年创建,用于通过卫星连接石油管道遥测系统。
两位发明者为未来的协议指定了几个要求:
- 简单的实现
- 服务质量数据交付
- 轻量级和带宽效率
- 数据不可知
- 持续的会话
MQTT 于 2013 年在结构化信息标准促进组织 (OASIS) 下被标准化为开源,OASIS 仍然管理 MQTT 标准。
MQTT的优势
MQTT有以下优势:
简单
使用 MQTT 启动和运行起来既快速又简单。
搭建只需要几条命令就可以搞定,启动也是非常快,还有专门的管理界面。
可靠
许多物联网设备依赖无线电连接来传输和收集数据,这意味着连接并不总是可靠的。
MQTT 通过提供内置的 QoS 功能来减少连接问题,该功能可以将消息排队,将它们保存在 MQTT 代理中,并让它们等待目标设备全部设置好接受它,这降低了消息错位的几率,因此消息注定要到达目的地。
双向消息传递
任何设备、事物或应用程序都可以发布或订阅由 MQTT 代理处理的任何主题。
这不是单向的,比如只能发布或者只能订阅,是既能发布又能订阅,类似于全双工通信。
大规模消息传递
由于Broker的存在,所以不管是100万台设备,还是100台设备,对于MQTT都是一样的,没有啥压力,因为最终消息都是传递到Broker中,不管多少个客户端监听消息,也是从Broker中拿。
MQTT工作原理
MQTT架构
MQTT 使用 PUSH/SUBSCRIBE(发布订阅) 模型在 TCP/IP 之上运行,在 MQTT 架构中,有两种类型的系统:
- 客户端
- 代理
代理是客户端与之通信的服务器,代理接收来自客户端的通信并将这些通信发送给其他客户端,客户端之间不直接通信,而是连接到代理,每个客户端可以是发布者、订阅者或两者兼而有之。
MQTT 是一种事件驱动的协议,没有定期或持续的数据传输,这使传输保持在最低限度。客户端仅在有信息要发送时发布,代理仅在新数据到达时向订阅者发送信息。
发布/订阅
在发布和订阅系统中,设备可以在某个主题上发布消息,也可以订阅特定主题以接收消息。
如图,设备 1 在某个主题上发布消息,设备 2 订阅了与设备 1发布的主题相同的主题,随后设备 2 就能接收到消息。
消息
消息是设备之间交换的信息,比如一些指令,或者设备的一些信息,或者是其他需要交换的信息。
主题
如图所示,我用一张图一句话解释一下:主题就是你微信订阅公众号的类型。
以公众号为例,创作者是一个个发布者,公众号的服务器是Broker,读者是订阅者,不同领域的发布者向不同的主题(领域)发布文章,比如瑞哥一般都是朝科技领域发布文章,那么所有读者(订阅者)订阅了科技领域的都可以看到我的文章。
这个领域就可以大致理解为主题。
主题用正斜杠分隔的字符串表示,每个正斜杠表示一个主题级别。
如图在公众号 文章类型中科技领域创建网络类型的主题:
注意:主题区分大小写,两个主题不同:
如果读者想要看网络方向的文章:
- 发布者在
article/technology/network
主题发布OSPF相关的文章 - 订阅者订阅了主题
article/technology/network
- 发布者在主题
article/technology/network
上有新消息发出的时候,订阅者都能订阅到。
Broker 经纪人
经纪人其实就是代理。
MQTT 代理负责接收所有消息, 过滤消息, 决定谁对它们感兴趣,然后将消息发布给所有订阅的客户端。
MQTT订阅
MQTT 客户端不直接相互连接,而是订阅主题以接收消息。
要订阅主题,客户端必须首先向代理发送订阅请求,SUBSCRIBE 请求可以包含多个主题,代理使用 SUBACK(确认订阅)响应来响应 SUBSCRIBE 请求,订阅还具有 QoS 设置,可用于降级已发布消息的 QoS。在这种情况下,消息总是以较低的 QoS 设置发布。
订阅通配符
订阅通配符有两种:
单级
单级通配符替换一个主题级别:
此通配符将涵盖以下主题:
- 文章/娱乐/网络
- 文章/科技/网络
- 文章/三农/网络
- 文章/新闻/网络
多级
多级通配符替换多个主题级别:
此通配符将涵盖以下主题:
- 文章/娱乐/网络
- 文章/科技/java
- 文章/三农/美食
- 文章/新闻/航天
服务质量 QoS
- QoS 0(最多一次):客户端的消息只发送一次,不管它是否已经到达代理。
- QoS 1(至少一次):客户端的消息被一遍又一遍地发送,直到代理以确认接收来响应,这可能导致消息多次到达代理。
- QoS 2(恰好一次):客户端发送一次消息,同时确保它已到达代理,QoS 2 通信需要比服务质量 0 或 1 更多的带宽。
MQTT几个重要的网站
- mqtt官网:
https://mqtt.org/
- emqx官网:
https://www.emqx.com/
总结
MQTT是一种轻量级的开放式消息传递协议,它为资源受限的网络客户端提供了一种在低带宽环境中分发遥测信息的简单方法,采用发布/订阅通信模式,用于机器对机器 ( M2M ) 通信。