news 2026/5/26 8:17:07

MQTT(mosquitto、命令行工具介绍)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MQTT(mosquitto、命令行工具介绍)

链接:

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 调试

十一、留言

如有问题,敬请指正。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/26 1:46:38

【Java毕设源码分享】基于springboot+vue的隔离人员的管理系统设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/5/26 0:34:32

【Java毕设源码分享】基于springboot+vue的高校网上订餐平台的设计与实现_(程序+文档+代码讲解+一条龙定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/5/26 0:52:42

DAY25 pipeline管道

浙大疏锦行 # 导入基础库 import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns import time # 导入 time 库 import warnings# 忽略警告 warnings.filterwarnings("ignore")# 设置中文字体和负号正常显示 plt.rcParams[…

作者头像 李华
网站建设 2026/5/25 5:57:28

深入理解连接错误:从 “ld returned 1“到系统性解决方案

引言 在C/C程序的构建流程中&#xff0c;链接&#xff08;Linking&#xff09; 是将多个预编译目标文件&#xff08; “.o”/ “.obj”&#xff09;与库文件&#xff08; “.a”/ “.lib”、 “.so”/ “.dll”&#xff09;组合为最终可执行文件或动态库的核心阶段。相较于编译…

作者头像 李华
网站建设 2026/5/26 5:45:07

人工智能之编程基础 Python 入门

前言本章节讲述python的基础数据类型&#xff0c;python的基础数据类型主要包括以下​不可变数据&#xff08;3 个&#xff09;&#xff1a;​Number&#xff08;数字&#xff09;、String&#xff08;字符串&#xff09;、Tuple&#xff08;元组&#xff09;&#xff1b;​可变…

作者头像 李华