1. MQTT发布/订阅最小通信实验
任务目标
在本机安装并配置 Mosquitto MQTT Broker,通过命令行客户端验证本地消息的发布与订阅功能,为后续 MQTT 协议实验搭建可用的本地消息中转环境。
环境准备
本案例以 Ubuntu 22.04 / Debian 11 为演示环境,macOS 用户可通过 brew install mosquitto 安装,Windows 用户请从官网下载安装包。核心依赖仅 Mosquitto 本体及其自带的命令行客户端工具。
# Ubuntu / Debian
sudo apt update
sudo apt install -y mosquitto mosquitto-clients
# 验证安装
mosquitto -h | head -n 3
mosquitto_pub -h 2>&1 | head -n 3
Broker 配置与启动
Mosquitto 默认配置文件位于 /etc/mosquitto/mosquitto.conf。为便于本案例独立验证,我们创建一个仅监听本地回环地址的最小配置,避免与系统服务冲突。
# 创建独立配置目录
mkdir -p ~/mqtt-local
# 写入最小配置
cat > ~/mqtt-local/mosquitto.conf << 'EOF'
listener 1883 localhost
allow_anonymous true
persistence false
log_dest stdout
EOF
# 前台启动 Broker(便于观察日志)
mosquitto -c ~/mqtt-local/mosquitto.conf -v
启动后终端应持续输出日志,最后一行显示 Opening ipv4 listen socket on port 1883,表示 Broker 已就绪。保持此终端运行,另开终端执行后续验证。
发布/订阅验证
以下命令在第二个终端中执行,验证消息能否通过本地 Broker 正确中转。订阅命令先执行并保持前台监听,发布命令在第三个终端执行。
# 终端 A:订阅主题 test/topic
mosquitto_sub -h localhost -p 1883 -t 'test/topic' -v
# 终端 B:发布消息到同一主题
mosquitto_pub -h localhost -p 1883 -t 'test/topic' -m 'hello mqtt'
验证判定标准
满足以下条件即视为案例通过:
- 终端 A 的
mosquitto_sub收到消息并输出test/topic hello mqtt; - Broker 启动终端中打印了对应的
New client connected与Received PUBLISH日志(-v模式); - 发布命令正常退出且无错误输出。
常见问题
- 端口被占用:若 1883 已被系统 mosquitto 服务占用,先执行
sudo systemctl stop mosquitto,或修改配置中的端口为 1884 并同步修改客户端-p参数。 - 连接被拒绝:确认 Broker 终端仍在运行且无报错;检查配置中
listener行是否包含localhost限制。 - 订阅无输出:确认发布与订阅使用完全相同的主题字符串(区分大小写),且发布时 Broker 已正常启动。