MQTT(mosquitto、命令行工具介绍)
2026/5/26 8:17:07 网站建设 项目流程

链接:

1、MQTT - mosquitto安装、启动、使用

2、MQTT--EMQX入门+MQTTX使用

3、EMQX-简介、安装部署、基础功能、python代码测试

4、MQTTX的官方文档(MQTTX 是由 EMQ 开发的一款开源跨平台 MQTT 5.0 桌面客户端)

一、MQTT相关知识

在我们的代码中,我们使用了一个公共的Mosquitto测试服务器(test.mosquitto.org),它允许我们进行测试而不需要自己搭建broker。但在生产环境中,建议搭建自己的Mosquitto服务器或使用其他可靠的MQTT云服务。

注意:公共服务器可能不稳定,且不保证消息的私密性,因此只适用于测试。

1.1 什么是 Mosquitto?

Mosquitto 是一个开源MQTT 消息代理(Broker),由 Eclipse Foundation 开发并维护。它是目前最流行、应用最广泛的 MQTT 代理软件之一。

1.2 MQTT 协议简介

  • MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅消息传输协议

  • 专为低带宽、高延迟或不稳定的网络环境设计

  • 广泛应用于物联网(IoT)、移动应用和 M2M(机器对机器)通信

二、核心特性

2.1 协议支持

特性支持情况
MQTT 3.1✅ 完全支持
MQTT 3.1.1✅ 完全支持
MQTT 5.0✅ 完全支持(v1.6+)
WebSocket✅ 支持
SSL/TLS✅ 支持加密通信

2.2 性能特点

  • 轻量级:占用资源少,适合嵌入式设备

  • 跨平台:Windows、Linux、macOS、Raspberry Pi 等

  • 高性能:支持大量并发连接(数万级别)

  • 可扩展:支持插件系统和集群部署

三、架构组成

3.1 主要组件

┌─────────────────────────────────────────┐ │ Mosquitto 生态系统 │ ├─────────────────────────────────────────┤ │ 1. mosquitto (代理服务器/守护进程) │ │ 2. mosquitto_pub (命令行发布工具) │ │ 3. mosquitto_sub (命令行订阅工具) │ │ 4. libmosquitto (C客户端库) │ │ 5. mosquitto_passwd (密码文件工具) │ └─────────────────────────────────────────┘

3.2 通信模型

发布者 (Publisher) → Mosquitto Broker → 订阅者 (Subscriber) (发布消息) (路由消息) (接收消息) 主题层级示例: home/livingroom/temperature ← 发布温度数据 home/bedroom/light/control ← 控制灯光开关

四、安装与配置

4.1 在不同系统上安装

Ubuntu/Debian
# 安装 Mosquitto sudo apt-get update sudo apt-get install mosquitto mosquitto-clients # 查看服务状态 sudo systemctl status mosquitto # 启动/停止服务 sudo systemctl start mosquitto sudo systemctl stop mosquitto # 设置开机启动 sudo systemctl enable mosquitto
Windows
# 1. 从官网下载安装包 # https://mosquitto.org/download/ # 2. 安装后,添加安装目录到 PATH 环境变量 # 3. 以服务方式运行 mosquitto install # 4. 启动服务 net start mosquitto

4.2 配置文件详解

默认配置文件位置:/etc/mosquitto/mosquitto.conf

# ==================== 监听配置 ==================== # 监听端口(默认1883为MQTT,8883为MQTT over SSL) listener 1883 0.0.0.0 listener 8883 0.0.0.0 protocol mqtt # WebSocket 支持 listener 9001 protocol websockets # ==================== 安全配置 ==================== # 允许匿名连接(默认true,生产环境应关闭) allow_anonymous true # 密码文件 password_file /etc/mosquitto/passwd # ACL(访问控制列表) acl_file /etc/mosquitto/acl # ==================== SSL/TLS 配置 ==================== # 证书文件 cafile /etc/mosquitto/certs/ca.crt certfile /etc/mosquitto/certs/server.crt keyfile /etc/mosquitto/certs/server.key # ==================== 日志配置 ==================== log_dest file /var/log/mosquitto/mosquitto.log log_type all # error, warning, notice, information, subscribe, unsubscribe # ==================== 持久化配置 ==================== persistence true persistence_location /var/lib/mosquitto/ persistence_file mosquitto.db # ==================== 桥接配置 ==================== # 连接其他MQTT代理 connection bridge-to-remote address remote.broker.com:1883 topic # both 2 # ==================== 限制配置 ==================== # 最大连接数 max_connections -1 # -1表示无限制 # 消息队列大小 max_queued_messages 1000 # 保持连接时间(秒) keepalive_interval 60

五、mosquitto_pub- 发布消息工具

5.1 基本语法

mosquitto_pub [选项] -t <主题> -m <消息>

5.2 常用参数详解

参数完整形式说明示例
-h--hostMQTT代理服务器地址-h localhost
-p--port端口号(默认1883)-p 1883
-t--topic消息主题(必需)-t "home/livingroom/temp"
-m--message消息内容(必需)-m "22.5"
-q--qos服务质量等级(0,1,2)-q 1
-r--retain设置为保留消息-r
-u--username用户名-u admin
-P--password密码-P secret123
-i--id客户端ID-i client_001
-d--debug调试模式-d
--help显示帮助信息--help

5.3 参数组合示例

# 示例1:最基本用法 - 连接本地服务器 # 格式:mosquitto_pub -h <主机> -t <主题> -m <消息> mosquitto_pub -h localhost -t "test" -m "Hello" # 示例2:连接远程公共测试服务器 mosquitto_pub -h test.mosquitto.org -t "my/test/topic" -m "Hello MQTT" # 示例3:带QoS等级(确保消息到达) mosquitto_pub -h localhost -t "sensor/data" -m "{\"temp\":22.5}" -q 1 # 示例4:保留消息(新订阅者能立即收到) mosquitto_pub -h localhost -t "config/mode" -m "auto" -r # 示例5:使用认证 mosquitto_pub -h 192.168.1.100 -u user1 -P pass123 -t "private/topic" -m "secret" # 示例6:SSL/TLS加密连接 mosquitto_pub -h broker.example.com -p 8883 --cafile ca.crt -t "secure" -m "data" # 示例7:从文件读取消息内容 echo "This is file content" > message.txt mosquitto_pub -h localhost -t "file/upload" -f message.txt # 示例8:从标准输入读取(管道方式) echo "Line 1\nLine 2" | mosquitto_pub -h localhost -t "stdin" -s -l

5.4 高级参数

# 设置Will遗言消息(客户端异常断开时发送) mosquitto_pub -h localhost -t "status/client1" -m "online" \ --will-topic "status/client1" \ --will-payload "offline" \ --will-retain \ --will-qos 1 # 保持连接(心跳间隔) mosquitto_pub -h localhost -t "ping" -m "alive" --keepalive 60 # 消息过期时间(秒) mosquitto_pub -h localhost -t "temporary" -m "expire in 10s" --message-expiry 10 # 自定义属性(MQTT 5.0) mosquitto_pub -h localhost -t "data" -m "value" --user-property "key:value"

六、mosquitto_sub- 订阅消息工具

6.1 基本语法

mosquitto_sub [选项] -t <主题>

6.2 常用参数详解

参数完整形式说明示例
-h--hostMQTT代理服务器地址-h localhost
-p--port端口号-p 1883
-t--topic订阅主题(必需)-t "sensor/#"
-q--qos订阅QoS等级-q 1
-v--verbose显示主题和消息-v
-u--username用户名-u subscriber
-P--password密码-P pass456
-i--id客户端ID-i sub_001
-k--keepalive心跳间隔-k 60
-C--msg-count接收消息数量后退出-C 10
-R--no-retained不接收保留消息-R
--help显示帮助--help

6.3 通配符使用

# 单级通配符 + (匹配一级) # 匹配:home/livingroom/temp,不匹配:home/livingroom/bed/temp mosquitto_sub -h localhost -t "home/+/temperature" -v # 多级通配符 # (匹配多级,必须在末尾) # 匹配:home/livingroom/light/status 和 home/kitchen/temp mosquitto_sub -h localhost -t "home/#" -v # 组合使用 mosquitto_sub -h localhost -t "+/sensor/+/data" -v

6.4 参数组合示例

# 示例1:基本订阅 mosquitto_sub -h localhost -t "news" # 示例2:显示主题和消息 mosquitto_sub -h localhost -t "sensor/temp" -v # 输出:sensor/temp 22.5 # 示例3:订阅多个主题 mosquitto_sub -h localhost -t "temperature" -t "humidity" -t "pressure" -v # 示例4:使用通配符订阅所有传感器数据 mosquitto_sub -h localhost -t "sensors/#" -v # 示例5:只接收10条消息后退出 mosquitto_sub -h localhost -t "test" -C 10 # 示例6:SSL加密连接 mosquitto_sub -h broker.example.com -p 8883 \ --cafile ca.crt \ --cert client.crt \ --key client.key \ -t "secure/data" -v # 示例7:保存输出到文件 mosquitto_sub -h localhost -t "log/#" > mqtt_log.txt # 示例8:格式化输出 mosquitto_sub -h localhost -t "data" -v -F "[%t] %p" # 输出:[home/temp] 22.5

6.5 输出格式化(-F 参数)

# 可用的格式化占位符: # %I: 消息ID # %t: 主题 # %p: 消息内容 # %T: Unix时间戳 # %U: 本地时间(YYYY-MM-DD HH:MM:SS) # %r: 保留标志(1=保留,0=不保留) # %q: QoS等级 # 示例:完整格式 mosquitto_sub -h localhost -t "#" -v -F "[%U] QoS:%q Topic:%t Payload:%p" # 输出:[2024-01-20 14:30:25] QoS:1 Topic:home/temp Payload:22.5

七、mosquitto_passwd- 密码管理工具

7.1 基本语法

mosquitto_passwd [选项] <密码文件> <用户名>

7.2 常用参数详解

# 创建新密码文件(如果文件存在则覆盖) mosquitto_passwd -c passwd.txt username1 # 提示输入密码两次 # 向现有文件添加用户 mosquitto_passwd passwd.txt username2 # 批量模式(直接在命令行指定密码) mosquitto_passwd -b passwd.txt username3 password123 # 删除用户 mosquitto_passwd -D passwd.txt username3 # 使用bcrypt加密(更安全,但更慢) mosquitto_passwd -c -b passwd.txt username4 password456 # 不加密(明文,不推荐) mosquitto_passwd -c -n passwd.txt username5

八、特殊参数和功能

8.1 连接选项

# 设置超时时间 mosquitto_pub -h broker.example.com --connection-timeout 10 -t "test" -m "hello" # 设置协议版本 mosquitto_sub -h localhost --protocol-version mqttv311 -t "test" # 清理会话(clean session) mosquitto_pub -h localhost --clean-session -t "test" -m "msg" # SSL选项 mosquitto_pub -h secure.broker.com \ --cafile ca.crt \ --cert client.crt \ --key client.key \ --insecure \ # 跳过证书验证(仅测试) -t "test" -m "data"

8.2 网络选项

# 绑定到特定网络接口 mosquitto_pub -h broker.com --bind-address 192.168.1.100 -t "test" -m "data" # 代理支持(SOCKS5) mosquitto_pub -h broker.com --proxy socks5h://proxy:1080 -t "test" -m "data" # IPv6连接 mosquitto_pub -h "::1" -t "test" -m "IPv6 test"

九、实际应用场景

9.1 监控系统主题

# 监控所有系统状态 mosquitto_sub -h localhost -t "\$SYS/#" -v # 监控特定指标 mosquitto_sub -h localhost -t "\$SYS/broker/bytes/received" -v mosquitto_sub -h localhost -t "\$SYS/broker/clients/connected" -v

9.2 设备模拟

# 模拟温度传感器 while true; do temp=$((20 + RANDOM % 10)) mosquitto_pub -h localhost -t "sensors/temperature" -m "$temp" -q 1 sleep 5 done # 模拟多个设备 for i in {1..5}; do mosquitto_pub -h localhost -t "device/$i/status" -m "online" -r & done

9.3 桥接和转发

# 订阅一个主题,并转发到另一个主题 mosquitto_sub -h source.broker.com -t "source/#" -v | \ while read -r line; do topic=$(echo "$line" | cut -d' ' -f1) message=$(echo "$line" | cut -d' ' -f2-) mosquitto_pub -h dest.broker.com -t "$topic" -m "$message" done

十、总结

10.1 关键要点:

  1. -h是最基本参数:指定MQTT代理服务器地址

  2. -t-m是必需参数:主题和消息内容

  3. 通配符+单级,#多级(必须在末尾)

  4. QoS等级-q 0(最多一次),-q 1(至少一次),-q 2(恰好一次)

  5. 调试:使用-d参数查看连接过程

10.2 最佳实践:

  1. 生产环境:总是使用认证和加密(SSL/TLS)

  2. 主题设计:使用层级结构,如设备/类型/位置/数据

  3. 保留消息:谨慎使用,避免积压

  4. 客户端ID:指定有意义的ID,便于监控

10.3 记忆口诀:

-h 主机 -p 端口 -t 主题 -m 消息 -q 质量 -r 保留 -u 用户 -P 密码 -v 详情 -d 调试

十一、留言

如有问题,敬请指正。

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

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

立即咨询