网站首页 > 技术文章 正文
MQTT代表Message Queue遥测传输。顾名思义,它是一种在两点之间传输消息的协议。MQTT如此特别的原因在于其超轻量级架构,非常适合带宽不佳的场景。
MQTT高级体系结构主要分为两部分 - 代理和客户端。
代理充当架构的核心,具有订阅者和发布者的能力。它是所有客户的联系点。代理的主要工作是将消息从发布者客户端排队并传输到订阅者客户端。但是,它还可以根据要求,设置和使用的代理服务拥有更强大的功能(例如SSL认证,日志,数据库存储等)。
客户端部分进一步划分为发布者和订阅者。由于客户端是进入边缘设备的实际软件组件,因此它们被设计为非常非常轻量级,并且经纪人处理已经轻量级架构的大部分处理。
因此,MQTT客户端具有非常具体和简化的任务。发布者 - 客户发布具有主题和质量的MESSAGES; 订户 - 客户端使用主题和质量订阅消息。这就是它的要点。它们几乎可以在任何操作系统上运行 - Mac,Windows和Linux; 以及Raspbian和Android等单板和移动操作系统。它们甚至作为应用存在!
MQTT细节
当然,MQTT简单而且非常棒,但它采用了巧妙的工程设计。以下是关于MQTT关键组件的一些细节。
消息
这是要发送的消息。通常称为“消息有效负载”,默认情况下,它被格式化为纯文本,使用户可以灵活地将消息有效负载构建为任何所需的格式。
话题
每个MQTT通信都依赖于“主题”的概念。单个唯一主题定义了发布者和订阅者之间的唯一管道或连接。实质上,如果发布的消息主题与订阅的主题匹配,则订阅者将获取消息。就如此容易!
它变得更好了。MQTT甚至允许在其主题中定义层次结构。层次结构级别由斜杠分隔。例如,在客厅发送温度的主题可能是“房屋/客厅/温度”。这基本上将等级定义为“温度是客厅的孩子,它是房子的孩子”。这也适用于其他房间,如“房屋/厨房/温度”,“房屋/卧室/温度”。
此外,您还可以使用称为通配符的内容订阅多个传感器。有两个通配符,“+”和“#”。加号是单级通配符,只允许层次结构的一个级别的任意值,而哈希符号允许数据从所有基础层次结构级别进入。
例如,在上面的例子中,房屋/ + /温度将给出客厅,厨房和卧室的温度值。订阅“hou??se /#”主题意味着订阅所有以house为主父母的主题。
QoS
存在服务质量功能,以提供具有或不具有保证的消息传递的灵活性。MQTT QoS只能在6位 - 0,1和2中布局。
QoS-0是最不可靠的。使用QoS 0发布的任何消息都将由发布者发送,然后被遗忘,而不是检查消息是否已成功传递。
QoS-1拥有“至少”一次传递消息的概念。保证任何消息至少传递一次,但也可以多次发送。
QoS-2是最可靠的 - “正好一次”。代理保证消息只到达目的地一次。QoS可靠性与带宽消耗成正比:更高的可靠性,更高的带宽消耗。
安全
MQTT真的想要轻量级。同时,MQTT作为协议确实有应用层安全措施。例如,每个客户端(发布者和订阅者)都有客户端名称和客户端ID。MQTT代理提供了实现身份验证的选项,以便客户端需要正确的用户名和密码才能连接到代理。
但是,MQTT也可以通过多层安全性实现。每层都可以防止不同类型的攻击。尽管协议本身规定了很少的安全机制,但MQTT可以使用其他最先进安全标准的所有常见实现,例如网络层中的VPN和传输层中的SSL / TLS。我们的想法是不重新发明轮子; 相反,它是建立在已接受且易于实施的标准之上。
MQTT可以很容易地嵌入到大多数流行语言中 - Java,Python,Perl,Ruby,C,C ++,NodeJS,Swift,Go,Lua,PHP,几乎涵盖你能想到的一切语言。
尽管MQTT在设计时考虑了机器对机器,但它的功能更为广泛。它有创造力的空间。它可以处理机器到云,云到机器,甚至应用程序到应用程序的通信。即使用不同语言编写的不同应用程序需要相互通信,也不会出汗。只需设置一个代理并将MQTT客户端代码段插入应用程序即可。他们会愉快地互相交谈。
MQTT对物联网项目有很大的帮助,这些项目有许多模块化组件在一系列不同的环境中相互通信。MQTT的简单性和高效性减少了无数个小时,试图让不同的组件通过不同的协议使用不同的语言来相互通信。
上手体验
您可以通过四个简单的步骤体验MQTT:
- 下载MQTT Box(Chrome的扩展)
- 创建一个客户端,其中包含详细信息以连接到代理(在本例中为HiveMQ Public Broker)
- 添加订阅者和发布者,两者都具有匹配的主题
- 发送消息来自出版商,并观看消息神奇地出现
当然,这是为了让你入门。MQTT Box是基于应用程序的MQTT客户端。HiveMQ是一种代理服务,你可以下载以在本地使用,或者付费以使用云代理服务。
想GET技能?
- 下载Mosquitto MQTT Broker(Mosquitto是众多其他MQTT Broker服务提供商之一,如HiveMQ,RabbitMQ,EMQTT等)
- 下载Mosquitto MQTT客户端(mosquitto_pub和mosquitto_sub)
- 从MQTTcommands启动代理
- 从MQTT命令启动订户
- 从MQTT命令发布消息
这是一些工具参考命令:
- Mosquitto Broker CLI命令
- Mosquitto Publisher CLI命令
- Mosquitto订户CLI命令
一旦你运行了代理,你就可以实际连接任何类型的客户端(发布者和订阅者):无论是命令行客户端,NiFi客户端,MQTT Box客户端,还是作为代码片段存在的客户端自己的应用。
文 | 小隐 云隐科技 希望用物联网领域项目经验和文字带您感受物联时代。
- 上一篇: 一种新的特征评价方法及在高铁故障中的应用
- 下一篇: MQTT原理学习总结 mqtt协议原理图
猜你喜欢
- 2024-10-11 Qt/C++编写物联网组件/支持modbus/rtu/tcp/udp/mqtt/多线程采集
- 2024-10-11 搞定客户端证书错误,看这篇就够了
- 2024-10-11 如何使用C LinkSDK(4.x)快速接入阿里云物联网平台?
- 2024-10-11 XMPP协议、MQTT协议、HTTP协议、CoAP协议的基本比较
- 2024-10-11 如何用工业树莓派和 MQTT 平台打通 OT 和 IT
- 2024-10-11 MQTT原理学习总结 mqtt协议原理图
你 发表评论:
欢迎- 最近发表
-
- 在 Spring Boot 项目中使用 activiti
- 开箱即用-activiti流程引擎(active 流程引擎)
- 在springBoot项目中整合使用activiti
- activiti中的网关是干什么的?(activiti包含网关)
- SpringBoot集成工作流Activiti(完整源码和配套文档)
- Activiti工作流介绍及使用(activiti工作流会签)
- SpringBoot集成工作流Activiti(实际项目演示)
- activiti工作流引擎(activiti工作流引擎怎么用)
- 工作流Activiti初体验及在数据库中生成的表
- Activiti工作流浅析(activiti6.0工作流引擎深度解析)
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)