物联网协议的王者:MQTT

简介: MQTT是一种轻量级的开放式消息传递协议,它为资源受限的网络客户端提供了一种在低带宽环境中分发遥测信息的简单方法,采用发布/订阅通信模式,用于机器对机器 ( M2M ) 通信。

你好,这里是网络技术联盟站。

今天跟大家聊一下物联网协议中比较著名的协议: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 ) 通信。

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
目录
相关文章
|
1月前
|
数据采集 传感器 监控
多协议网关BL110钡铼6路RS485转MQTT协议云网关
BL110钡铼6路RS485转MQTT协议云网关是一款高性能、易配置的工业级设备,适用于各种需要远程监控和数据采集的物联网应用场景。通过将传统RS485设备的数据转换为MQTT协议并上传至云平台,实现了设备的远程管理和智能控制,极大地提升了系统的管理效率和响应速度。
43 2
|
2月前
|
传感器 消息中间件 物联网
常用的物联网协议
常用的物联网协议包括:MQTT(消息队列遥测传输)、CoAP(受限应用协议)、HTTP/HTTPS、LWM2M(轻量级机器对机器)和Zigbee等。这些协议在不同的应用场景中发挥着重要作用,如数据传输、设备管理等。
|
3月前
|
网络协议 物联网 网络性能优化
物联网协议比较 MQTT CoAP RESTful/HTTP XMPP
【10月更文挑战第18天】本文介绍了物联网领域中四种主要的通信协议:MQTT、CoAP、RESTful/HTTP和XMPP,分别从其特点、应用场景及优缺点进行了详细对比,并提供了简单的示例代码。适合开发者根据具体需求选择合适的协议。
91 5
|
2月前
|
消息中间件 监控 物联网
物联网8大协议介绍及对比
根据具体的应用需求,选择合适的协议可以大幅提升系统的性能和可靠性。希望本文能为您在物联网协议的选择和应用中提供有价值的参考。
593 0
|
4月前
|
消息中间件 监控 物联网
MQTT协议对接及RabbitMQ的使用记录
通过合理对接MQTT协议并利用RabbitMQ的强大功能,可以构建一个高效、可靠的消息通信系统。无论是物联网设备间的通信还是微服务架构下的服务间消息传递,MQTT和RabbitMQ的组合都提供了一个强有力的解决方案。在实际应用中,应根据具体需求和环境进行适当的配置和优化,以发挥出这两个技术的最大效能。
276 0
|
4月前
|
网络协议 物联网 网络性能优化
物联网江湖风云变幻!MQTT CoAP RESTful/HTTP XMPP四大门派谁主沉浮?
【9月更文挑战第3天】物联网(IoT)的兴起催生了多种通信协议,如MQTT、CoAP、RESTful/HTTP和XMPP,各自适用于不同场景。本文将对比这些协议的特点、优缺点,并提供示例代码。MQTT轻量级且支持QoS,适合大规模部署;CoAP基于UDP,适用于低功耗网络;RESTful/HTTP易于集成但不适合资源受限设备;XMPP支持双向通信,适合复杂交互应用。通过本文,开发者可更好地选择合适的物联网通信协议。
60 2
|
5月前
|
物联网 C# 智能硬件
智能家居新篇章:WPF与物联网的智慧碰撞——通过MQTT协议连接与控制智能设备,打造现代科技生活的完美体验
【8月更文挑战第31天】物联网(IoT)技术的发展使智能家居设备成为现代家庭的一部分。通过物联网,家用电器和传感器可以互联互通,实现远程控制和状态监测等功能。本文将探讨如何在Windows Presentation Foundation(WPF)应用中集成物联网技术,通过具体示例代码展示其实现过程。文章首先介绍了MQTT协议及其在智能家居中的应用,并详细描述了使用Wi-Fi连接方式的原因。随后,通过安装Paho MQTT客户端库并创建MQTT客户端实例,演示了如何编写一个简单的WPF应用程序来控制智能灯泡。
184 0
|
3月前
|
消息中间件 JSON Java
开发者如何使用轻量消息队列MNS
【10月更文挑战第19天】开发者如何使用轻量消息队列MNS
228 10
|
3月前
|
消息中间件 安全 Java
云消息队列RabbitMQ实践解决方案评测
一文带你详细了解云消息队列RabbitMQ实践的解决方案优与劣
119 10
|
2月前
|
消息中间件 存储 Kafka
MQ 消息队列核心原理,12 条最全面总结!
本文总结了消息队列的12个核心原理,涵盖消息顺序性、ACK机制、持久化及高可用性等内容。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。

相关产品

  • 物联网平台