☰
MQTT 安装及使用详细教程(Windows / Linux 分平台讲解)
2026/10/6 8:01:37 网站建设 项目流程

一、MQTT 简介

MQTT(Message Queuing Telemetry Transport)是一种基于发布/订阅模式的轻量级消息传输协议,广泛应用于物联网、传感器数据采集、即时通讯等场景。MQTT 的核心架构包含三个角色:

  • Broker(消息代理):负责接收、过滤和分发消息的中间服务器。
  • Publisher(发布者):向 Broker 指定主题发送消息的客户端。
  • Subscriber(订阅者):从 Broker 订阅主题并接收消息的客户端。

本教程选用Eclipse Mosquitto作为 Broker,它是目前最流行的开源 MQTT Broker 之一,支持 MQTT 3.1、3.1.1 和 5.0 协议,并自带mosquitto_pub和mosquitto_sub命令行客户端工具。下面分别讲解在 Windows 和 Linux 上的安装与使用方法。

二、Windows 平台安装与使用

2.1 下载与安装

  1. 打开浏览器,访问 Mosquitto 官方下载页面:https://mosquitto.org/download/
  2. 在 “Binary installation” 区域下载 Windows 安装程序(64 位或 32 位),文件名为mosquitto-x.x.x-install-windows-x64.exe或类似格式。
  3. 双击运行安装程序,在安装向导中:
    • 勾选Service组件,这样 Mosquitto 会注册为 Windows 服务,开机自动启动。
    • 默认安装路径为C:\Program Files\mosquitto。
  4. 按照向导完成安装,点击 Finish。

静默安装(可选):在命令行中执行mosquitto-2.0.15-install-windows-x64.exe /S可无界面安装;使用/D参数可指定安装目录。

2.2 将 Mosquitto 添加到系统 PATH(推荐)

为了方便在任意命令行窗口中直接使用mosquitto、mosquitto_pub、mosquitto_sub等命令,建议将安装目录加入系统环境变量:

  1. 打开 “开始” 菜单,搜索并进入 “编辑系统环境变量”。
  2. 点击 “环境变量” → 在 “系统变量” 中找到Path→ 点击 “编辑”。
  3. 点击 “新建”,添加路径C:\Program Files\mosquitto。
  4. 点击确定保存。

2.3 配置 Mosquitto

默认情况下,Mosquitto 只监听本地回环地址,不允许远程连接。如需让局域网内其他设备连接,需要修改配置文件:

  1. 以管理员身份打开记事本,打开文件:C:\Program Files\mosquitto\mosquitto.conf。
  2. 找到#listener行,取消注释并设置为:
    listener 1883
    这样 Mosquitto 会监听所有网络接口的 1883 端口。
  3. 找到#allow_anonymous true行,取消注释,改为:
    allow_anonymous true
    这允许匿名连接(仅建议在测试环境使用)。
  4. 保存文件。

2.4 管理 Mosquitto 服务

安装完成后,Mosquitto 已作为 Windows 服务自动运行。如需重启使配置生效,以管理员身份打开命令提示符(CMD),执行:

net stop mosquitto net start mosquitto

也可以按Win + R,输入services.msc,在服务列表中找到 “Mosquitto Broker” 进行启动、停止或重启操作。

2.5 配置 Windows 防火墙

如果允许外部设备连接,需要放行 1883 端口:

  1. 打开 “Windows Defender 防火墙” → “高级设置”。
  2. 点击 “入站规则” → “新建规则”。
  3. 选择 “端口” → “TCP” → 输入 “特定本地端口”1883。
  4. 选择 “允许连接”,勾选所有网络类型,命名规则为 “MQTT” 后完成。

也可以同时添加程序规则,允许C:\Program Files\mosquitto\mosquitto.exe通过防火墙。

2.6 基本测试

打开两个命令提示符窗口:

窗口 1 — 订阅主题:

mosquitto_sub -h localhost -t test/topic -v

窗口 2 — 发布消息:

mosquitto_pub -h localhost -t test/topic -m "hello world"

发布后,窗口 1 应显示test/topic hello world,说明 Broker 工作正常。

三、Linux 平台安装与使用

以 Ubuntu 24.04 为例进行讲解,其他发行版(如 CentOS/RHEL)步骤类似,包管理器命令有所不同。

3.1 安装 Mosquitto 及客户端

在终端中执行:

sudoaptupdatesudoaptinstall-ymosquitto mosquitto-clients

mosquitto是 Broker 服务端,mosquitto-clients包含mosquitto_pub和mosquitto_sub命令行工具。

安装完成后可以验证版本:

mosquitto-v

3.2 管理 Mosquitto 服务

Mosquitto 在 Ubuntu 中通过 systemd 管理。常用命令:

# 查看服务状态sudosystemctl status mosquitto# 启动服务sudosystemctl start mosquitto# 停止服务sudosystemctl stop mosquitto# 重启服务(修改配置后使用)sudosystemctl restart mosquitto# 设置开机自启并立即启动sudosystemctlenable--nowmosquitto

默认安装后 Mosquitto 可能仅允许本地连接,需要根据需求调整配置。

3.3 配置 Mosquitto

Mosquitto 的主配置文件位于/etc/mosquitto/mosquitto.conf,但更推荐在/etc/mosquitto/conf.d/目录下创建独立的配置文件,便于管理和覆盖。

创建配置文件:

sudonano/etc/mosquitto/conf.d/default.conf

添加以下内容:

listener 1883 allow_anonymous true
  • listener 1883:监听所有网络接口的 1883 端口,允许远程连接。
  • allow_anonymous true:允许匿名连接(仅限测试环境,生产环境应启用认证)。

保存后重启服务:

sudosystemctl restart mosquitto

3.4 配置防火墙

Ubuntu 默认使用ufw防火墙,放行 1883 端口:

sudoufw allow1883

如果使用firewalld(CentOS/RHEL),则执行:

sudofirewall-cmd--permanent--add-port=1883/tcpsudofirewall-cmd--reload

3.5 基本测试

打开两个终端窗口:

终端 1 — 订阅:

mosquitto_sub-hlocalhost-thome/sensor/temperature-v

终端 2 — 发布:

mosquitto_pub-hlocalhost-thome/sensor/temperature-m"23.5"

终端 1 会实时显示收到的消息。使用-q 1参数可指定 QoS 等级,-r参数可设置保留消息。

3.6 使用 Docker 部署(可选方案)

如果偏好容器化部署,可以使用官方 Mosquitto Docker 镜像:

dockerrun-d\--namemosquitto\-p1883:1883\-v$(pwd)/mosquitto.conf:/mosquitto/config/mosquitto.conf\eclipse-mosquitto

其中-p 1883:1883将容器端口映射到宿主机,-v挂载自定义配置文件。如果使用默认配置直接运行,可简化为:

dockerrun-d--namemosquitto-p1883:1883 eclipse-mosquitto

需要注意的是,Docker 部署时也要确保宿主机防火墙放行了 1883 端口,且配置文件中的listener应设置为0.0.0.0以允许外部访问。

四、启用密码认证(安全加固)

匿名访问仅适合本地测试。在对外提供服务时,应启用用户名/密码认证。

Windows

以管理员身份打开命令提示符,进入 Mosquitto 安装目录,执行:

cd "C:\Program Files\mosquitto" mosquitto_passwd.exe -c passwd.txt yourusername

系统会提示输入密码。-c表示创建新文件,后续添加用户时去掉-c即可。

编辑mosquitto.conf,修改为:

allow_anonymous false password_file C:\Program Files\mosquitto\passwd.txt

重启 Mosquitto 服务。

Linux

sudomosquitto_passwd-c/etc/mosquitto/passwd yourusername

输入密码后,编辑配置文件:

allow_anonymous false password_file /etc/mosquitto/passwd

重启服务:sudo systemctl restart mosquitto。

启用认证后,客户端连接时需要携带用户名和密码:

mosquitto_pub-hlocalhost-ttest-m"hello"-uyourusername-Pyourpassword

五、Python 客户端使用示例

Mosquitto 自带的命令行工具适合快速测试,实际项目中通常使用编程语言的客户端库。Python 推荐使用paho-mqtt:

pipinstallpaho-mqtt

订阅端代码(subscriber.py):

importpaho.mqtt.clientasmqttdefon_connect(client,userdata,flags,rc,properties=None):ifrc==0:print("Connected to MQTT Broker!")client.subscribe("home/sensor/temperature")else:print(f"Connection failed with code{rc}")defon_message(client,userdata,msg):print(f"Received `{msg.payload.decode()}` from `{msg.topic}`")client=mqtt.Client(mqtt.CallbackAPIVersion.VERSION2)client.on_connect=on_connect client.on_message=on_message client.connect("localhost",1883,60)client.loop_forever()

发布端代码(publisher.py):

importpaho.mqtt.clientasmqtt client=mqtt.Client(mqtt.CallbackAPIVersion.VERSION2)client.connect("localhost",1883,60)client.publish("home/sensor/temperature","25.6")client.disconnect()print("Message published.")

先运行 subscriber.py,再运行 publisher.py,订阅端将输出Received 25.6 from home/sensor/temperature。

六、常见问题与排查

Q1:客户端无法远程连接到 Broker?

检查三处:① 配置文件中是否设置了listener 1883且没有绑定127.0.0.1;② 防火墙是否放行 1883 端口;③ Windows 上是否将 Mosquitto 服务配置为允许外部连接。

Q2:Windows 上mosquitto命令找不到?

将C:\Program Files\mosquitto添加到系统 PATH 环境变量后,重新打开命令提示符即可。

Q3:如何验证 Broker 是否正在监听 1883 端口?

Windows:netstat -ano | findstr 1883
Linux:sudo ss -tlnp | grep 1883

Q4:Mosquitto 默认只允许本地连接怎么办?

这是 Mosquitto 2.x 的安全默认行为。在配置文件中显式添加listener 1883即可允许远程连接。

Q5:如何测试公网/远程 Broker?

可以使用 Mosquitto 官方提供的公共测试服务器test.mosquitto.org:

mosquitto_pub-htest.mosquitto.org-ttest/topic-m"hello"mosquitto_sub-htest.mosquitto.org-ttest/topic-v

以上即为 MQTT(Mosquitto Broker)在 Windows 和 Linux 平台上从安装、配置、测试到安全加固和编程使用的完整教程。建议先在本地环境完成基本测试,再逐步引入密码认证和 TLS 加密以适应生产环境需求。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询