1. 搭建本地MQTT Broker

搭建本地MQTT Broker 学习卡片

任务目标

在本机安装并配置 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'

验证判定标准

满足以下条件即视为案例通过:

  1. 终端 A 的 mosquitto_sub 收到消息并输出 test/topic hello mqtt;
  2. Broker 启动终端中打印了对应的 New client connected 与 Received PUBLISH 日志(-v 模式);
  3. 发布命令正常退出且无错误输出。

常见问题

  • 端口被占用:若 1883 已被系统 mosquitto 服务占用,先执行 sudo systemctl stop mosquitto,或修改配置中的端口为 1884 并同步修改客户端 -p 参数。
  • 连接被拒绝:确认 Broker 终端仍在运行且无报错;检查配置中 listener 行是否包含 localhost 限制。
  • 订阅无输出:确认发布与订阅使用完全相同的主题字符串(区分大小写),且发布时 Broker 已正常启动。