
目录
1. MQTT
这里速通一下MQTT相关介绍,详细可以在下方连接找到MQTT相关章节:
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于 TCP/IP 协议上,由IBM 在 1999 年发布。

1.1 客户端(发布者/订阅者)
在 MQTT 协议中,任何通过网络连接到 MQTT 服务器(Broker)并与之通信的应用程序或设备都被称为 MQTT 客户端。它是 MQTT 通信的起点和终点。
一个 MQTT 客户端可以同时是发布者(Publisher)、订阅者(Subscriber),或者两者皆是。例如,一个智能灯既可以订阅 light/kitchen/command 主题来接收开关指令(作为订阅者),也可以发布 light/kitchen/status 主题来上报自己的当前状态(作为发布者)。
| 客户端类型 | 示例 | 典型角色 |
|---|---|---|
| 物联网设备 | 传感器、执行器、智能家电、车载设备、智能电表 | 主要是发布者(上报数据),有时也是订阅者(接收控制指令) |
| 后端服务 | Java, Python, Go, Node.js 等编写的应用程序 | 既是订阅者(接收设备数据),也是发布者(向设备发送指令) |
| Web/移动应用 | 浏览器(通过 MQTT over WebSocket)、手机App | 主要是订阅者(查看设备状态),有时也是发布者(控制设备) |
| 网关/边缘计算 | 工业网关、边缘服务器 | 中转角色:订阅设备主题,处理数据后,再发布到其他主题 |
1.2 服务端(Mqtt broker)
MQTT Broker 是一个软件服务器程序,它是所有 MQTT 客户端连接的终点。它的核心职责是接收来自发布者客户端的消息,并根据主题(Topic)过滤后,将其分发(路由)给所有相关的订阅者客户端。它本身不产生数据,只是一个消息中转站和调度中心。
其在通话过程中的功能,首先是连接管理,负责处理客户端的连接请求(CONNECT 包),验证其身份(如用户名/密码、客户端证书等),维持会话状态,保持心跳检测,如果客户端在“保持连接”时间内未通信,Broker 会认为其已断开。
其最核心的功能是消息路由 (Message Routing):
-
接收发布:接收来自发布者客户端的消息(PUBLISH 包)。
-
主题匹配:根据消息的主题,使用主题过滤器和通配符规则,在它的订阅列表中查找所有匹配的订阅者客户端。
-
消息分发:将消息准确地发送给每一个匹配的订阅者。这是 Broker 最繁重的工作。
你可以认为实现了MQTT通讯协议的代理软件就是 MQTT Broker(如 EMQX, HiveMQ, Mosquitto)。一些详细介绍可以参考如下链接:
MQTT Broker: How It Works, Popular Options, and Quickstart | EMQ
1.3 主题(Topic)
主题是 MQTT 中用于实现消息路由的机制,是连接发布者和订阅者的桥梁。 你可以把它理解为一个地址标签或频道名称。发布者将消息发送到某个主题,订阅者通过订阅该主题来接收消息。服务器(Broker)的责任就是根据主题将消息从发布者正确地分发到所有对应的订阅者。
主题是一个UTF-8编码的字符串,使用正斜杠 (/) 来分隔层级结构,形成一个类似于文件路径或URL的格式。
举个例子:
- sensor/temperature/room1
- vehicle/abc-123/gps/speed
- home/livingroom/light/switch
主题名是大小写敏感的。sensor/temp 和 Sensor/Temp 会被视为两个不同的主题。
为了实现一次订阅多个主题的目标,订阅者在订阅主题时可以使用通配符。MQTT提供了两种类型的主题通配符,单级通配符和多级通配符,以满足不同的订阅需求:
单层通配符:+ (Plus)
+ 代表匹配且只匹配一个层级的任何内容。
订阅 sensor/+/temperature 可以匹配:
- sensor/room1/temperature ✅
- sensor/room2/temperature ✅
- sensor/outdoor/temperature ✅
但不能匹配:
- sensor/temperature ❌(层级太少)
- sensor/room1/floor/temperature ❌(层级太多)
多层通配符:# (Hash)
# 代表匹配零个或多个任意层级。它必须是主题的最后一个字符,并且前面必须有一个 /。
订阅 sensor/office/# 可以匹配:
- sensor/office/temperature ✅
- sensor/office/humidity ✅
- sensor/office/light/level ✅
- sensor/office ✅(匹配零个层级)
但不能匹配:
- sensor/lobby/temperature ❌(office 层级不匹配)
1.4 服务质量
MQTT定义了三个级别的QoS,以提供不同级别的消息可靠性。每个消息在发布时可以独立设置自己的QoS。
- QoS 0:最多传递一次消息,可能会丢失;
- QoS 1: 至少传递一次消息,保证到达,但可能会重复;
- QoS 2: 精确传递一次消息,保证到达且不重复。
2. EMQX
2.1 概述
上面我们也提到了,要想实现MQTT客户端的数据通信,需要服务端的参与,而我们通常都是使用如华为云IOT、阿里云IOT、中国移动OneNet、腾讯云IOT等作为服务端,但是这段时间也看到了如阿里云在今年2月1号已经不支持新购了,因此为了方便我们自己使用,自己部署一个MQTT服务器,这里我们使用EMQX来进行部署。
EMQX 是一款实现了MQTT协议的,开源的 MQTT 消息代理软件。MQTT 定义了消息通讯的规则和流程,而 EMQX 则是遵循这些规则的软件,使得设备能够依据 MQTT 协议进行有效通信。EMQX 支持多种协议,包括 MQTT (3.1、3.1.1 和 5.0)、HTTP、QUIC 和 WebSocket 等,保证各种网络环境和硬件设备的可访问性。EMQX 还提供了全面的 SSL/TLS 功能支持,比如双向认证以及多种身份验证机制,为物联网设备和应用程序提供可靠和高效的通信基础设施。
详解介绍可参考官方文档:EMQX 概览 | EMQX 文档
EMQX 公司主要提供三个产品,可在官网首页产品导航查看每一种产品;主要体现在支持的连接数量、产品功能和商业服务等方面的区别:
EMQX Broker:EMQX 开源版,完整支持 MQTT V3.1.1/V5.0 协议规范,完整支持 TCP、TLS、WebSocket 连接,支持百万级连接和分布式集群架构;LDAP, MySQL, Redis, MongoDB 等扩展插件集成,支持插件模式扩展服务器功能;支持跨 Linux、Windows、macOS 平台安装,支持公有云、私有云、K8S/容器部署
EMQX Enterprise:EMQX 企业版,在开源版基础上,支持物联网主流协议 MQTT、MQTT-SN、 CoAP/LwM2M、HTTP、WebSocket 一站式设备接入;JT-808/GBT-32960 等行业协议支持,基于 TCP/UDP私有协议的旧网设备接入兼容,多重安全机制与认证鉴权;高并发软实时消息路由;强大灵活的内置规则引擎;企业服务与应用集成;多种数据库持久化支持;消息变换桥接转发 Kafka;管理监控中心
EMQX Platform:EMQX 平台版,EMQ X Platform 是面向千万级超大型 IoT 网络和应用,全球首选电 信级物联网终端接入解决方案。千万级大容量;多物联网协议;电信级高可靠;卓越 5G 网络支持;跨云跨IDC 部署;兼容历史系统;完善的咨询服务(从咨询到运维)
EMQX官网跳转链接:
EMQX第三方跳转链接:
2.2 部署安装
2.2.1 下载
最近几个版本已经不发布适配Windows的安装包了,我们需要找找以前的版本下载安装包,流程如下所示,先点击上方链接,找到图示位置点击资源->文档:

找到EMQX私有部署:

可以看到截止到当前博客发布的时候,此时最新版本为V5.10,已经没有Windows版本的支持了:

找到上图版本号下面的旧版文档位置,点击,进入到如下页面,我们选择V5.3版本,我们自行点击可以看到从V5.5版本就已经没有Windows平台下的部署安装包了:

点击查看文档,按照下图操作:

对于V5.4版本虽然也显示有安装包,但是点击完会显示:

2.2.2 安装
找到刚刚下载的安装包解压,将解压后的安装包路径复制一下:

然后找到电脑下方搜索栏,输入 Windows PowerShell 找到图示打开:

然后输入cd命令,粘贴上刚刚复制的路径,进入路径内:
cd D:\EMQX\emqx-5.3.2-windows-amd64
注意用自己的路径:

继续输入启动EMQX命令,有的可能会弹出防火墙同意即可:
.\bin\emqx start
回车,显示如下,代表已经正常启用了,可以将这个页面关掉了:

2.2.3 部署
打开一个空白浏览器输入如下网址:
http://127.0.0.1:18083
这是一个内置的管理控制台,方便用户通过Web页面就能轻松管理和监控EMQX集群,并配置和使用所需的各项功能,可以管理以连接的客户端或检查运行状态:

第一次登录初始的账号密码如下:
账号:admin
密码:public
点击登录后会提示你修改密码,想修改修改,不想修改下方有个跳过,直接跳过也行:

成功登陆页面如下:

拓展一点东西:
| 端口 | 协议 | 描述 |
|---|---|---|
| 1883 | TCP | MQTT over TCP 监听器端口,主要用于未加密的 MQTT 连接。 |
| 8883 | TCP | MQTT over SSL/TLS 监听器端口,用于加密的 MQTT 连接。 |
| 8083 | TCP | MQTT over WebSocket 监听器端口,使 MQTT 能通过 WebSocket 进行通信。 |
| 8084 | TCP | MQTT over WSS (WebSocket over SSL) 监听器端口,提供加密的 WebSocket 连接。 |
| 18083 | HTTP | EMQX Dashboard 和 REST API 端口,用于管理控制台和 API 接口。 |
| 4370 | TCP | Erlang 分布式传输端口,根据节点名称不同实际端口可能是 BasePort (4370) + Offset。 |
| 5370 | TCP | 集群 RPC 端口(在 Docker 环境下为 5369),根据节点名称不同实际端口可能是 BasePort (5370) + Offset。 |
2.2.4 MQTT参数配置
如图根据左侧工具栏,找到MQTT配置,配置你想要的参数,然后点击下方保存参数,这里我把最大报文调大点(最大应该到256),其他直接用默认参数了:

可以自行点击看一下,上面服务等级,心跳等一些配置,回头用到再去配置。
2.2.5 MQTT通信测试
再次找到左侧工具栏,找到 WebSocket 客户端,创建一个新的客户端,完善参数点击连接:

我们把用户名和密码随便填一下,因为现在还没有做验证,所以暂时不用在意这些,然后点击右下角连接,可以看到上方显示已连接:

下滑,找到“订阅”点击,找到“发送”点击,可以发现成功发送和接收:

3. MQTTX
上面我们仅仅是在 EMQX Dashboard ,其是 EMQX 提供了一个内置的管理控制台,下面我们通过客户端对其进行一个访问测试,这里我们使用官方给我们提示使用的客户端MQTTX:

3.1 概述
MQTTX 是 EMQX 开源的一款跨平台 MQTT 5.0 客户端工具,它支持 macOS、Linux、Windows,并且支持自定义脚本模拟测试、MQTT 消息格式转换、日志记录等多个功能。您可通过 MQTTX 一键式的连接方式和图形界面,您可轻松测试 MQTT/TCP、MQTT/TLS、MQTT/WebSocket 连接。
MQTTX 包含三种类型的工具:
- MQTTX Desktop:MQTTX Desktop是一款跨平台的 MQTT 桌面客户端工具。
- MQTTX CLI:MQTTX CLI是EMQ开源的一款 MQTT 5.0 命令行客户端工具
- MQTT Web:MQTTX Web是一款基于浏览器访问客户端工具。
这里我们平常使用的是第一种,找到上方图片中的MQTTX点击,跳转到如下界面,这里我使用的是Windows下的x86-64,根据自己需求下载:

安装非常简单这里就不在过多演示了,直接一直下一步即可,当然想换一下保存路径,在这一步换一下即可:

安装完显示如下图标:

双击打开即可。
3.2 客户端连接测试
3.2.1 发送端口
双击打开后,找到左侧“+”按键点击,此时还没有配置客户端认证,现在只要IP和端口输入正确就可以正常连接到刚刚部署的 EMQX Dashboard 当中,IP需要用我们部署的IP,也就是:
127.0.0.1
名称和密码此时可以随便取,这里我直接空着:

找到上方图片右上角位置可以看到“连接”,点击可以发现显示已连接:

如果想要更改刚刚填写的信息,按照如下配置,会重新进入到配置页面

确定配置后,再次点击连接:

此时连接成功后,我们可以来到刚刚部署的 EMQX Dashboard 当中,找到客户端,点击:

如果没有显示可以点击左侧刷新按钮,刷新一下,然后找到向下箭头位置,可以对比一下这个客户端的ID,就是我们刚刚创建的ID:


3.2.2 接收端口
就是把上面的发送端口的创建流程再来一遍,改一下名(名字随便取不需要一样):

回到客户端看一下,两个都已经连接上了:

3.2.3 消息发送
在MQTTX客户端和MQTT服务器连接建立后,可以在连接主页面的下方的输入框内,输入主题(Topic) 和消息体(Payload) 后,点击右下角发送图标按钮,就可以想MQTT服务器发送测试消息了,来到TX,也就是发送(其实随便一个都可以,既可以收也可以发,这里主要是为了方便解释一个命名为TX,一个命名为RX):

3.2.4 消息订阅
来到RX,找到添加订阅:

输入我们想要订阅的主体,点击确定即可:

这样等我们TX再次点击发送的时候,RX就会接收到相应的消息:
TX:

RX:

当然我们也可以给TX进行订阅,这样在他本身发送的时候,就会订阅到发送的消息:

3.3 客户端认证配置
EMQX默认配置中启用了匿名认证,任何客户端都能接入EMQX。没有启用认证插件或认证插件没有显式允许/拒绝(ignore)连接请求时,EMQX 将根据匿名认证启用情况决定是否允许客户端连接。 在正式产品里肯定是要启用认证的,不然任何设备都能接入。
那么如何进行认证呢?首先,还回到我们的 EMQX Dashboard 当中,找到客户端认证界面,点击创建:

选择密码认证,点击下一步:

选择内置数据库点击下一步:

设置认证方式(都可以默认,不用改),直接点击创建:

创建成功后点击用户管理:

我们先创建一个TX的用户,注意用户名和密码要和刚刚创建的一致,否则将无法连接:

点击保存可以发现创建成功:

然后我们来到MQTTX这边,先连接TX,可以发现直接连接上了:

再试试RX,会发现提示未授权,无法连接:

我们在把RX添加一下:

再试一下,可以发现连接上了:



Windows下搭建EMQX MQTT服务器及MQTTX验证
1万+

被折叠的 条评论
为什么被折叠?



