基于 rumqttd 的 MQTT Broker 实现,支持 MQTT 3.1.1 和 MQTT 5.0 协议。
- ✅ 统一端口多协议 - 单端口 1883 自动支持 MQTT 3.1.0, 3.1.1, 5.0
- ✅ 智能协议检测 - 自动识别客户端协议版本
- ✅ 透明协议升级 - MQTT 3.1.0 自动升级到 3.1.1
- ✅ WebSocket 支持 (端口 8080)
- ✅ 管理控制台 (端口 3030)
- ✅ 可配置文件 支持
- ✅ 高并发 支持 (默认 10000 连接)
- ✅ 零配置 - 客户端无需知道后端细节
cargo run首次运行会自动生成 config.toml 配置文件。
编辑 config.toml 可以自定义:
- 端口号
- 最大连接数
- 超时设置
- 消息大小限制
- 等等...
所有 MQTT 版本都使用同一个端口 1883!
MQTT 3.1.0:
# 自动检测并升级到 3.1.1
mosquitto_sub -h localhost -p 1883 -t "test/topic" -V mqttv31
mosquitto_pub -h localhost -p 1883 -t "test/topic" -m "Hello from 3.1.0!" -V mqttv31MQTT 3.1.1:
# 直接连接
mosquitto_sub -h localhost -p 1883 -t "test/topic" -V mqttv311
mosquitto_pub -h localhost -p 1883 -t "test/topic" -m "Hello from 3.1.1!" -V mqttv311MQTT 5.0:
# 自动路由到 5.0 broker
mosquitto_sub -h localhost -p 1883 -t "test/topic" -V mqttv5
mosquitto_pub -h localhost -p 1883 -t "test/topic" -m "Hello from 5.0!" -V mqttv5跨版本通信:
# 3.1.1 客户端订阅
mosquitto_sub -h localhost -p 1883 -t "test" -V mqttv311
# 5.0 客户端发布 (在另一个终端)
mosquitto_pub -h localhost -p 1883 -t "test" -m "Cross-version!" -V mqttv5WebSocket:
# 使用 WebSocket 连接
mosquitto_sub -h localhost -p 8080 -t "test/topic" -V mqttv311- 下载 MQTTX
- 创建新连接:
- Host:
localhost - Port:
1883(MQTT 3.1.1) 或1884(MQTT 5.0) - Protocol:
mqtt://
- Host:
- 1883: 统一 MQTT 端口 (自动支持 3.1.0, 3.1.1, 5.0)
- 8080: WebSocket (MQTT 3.1.1)
- 3030: 管理控制台
客户端 → 端口 1883 (智能适配器)
↓
检测协议版本
↓
├─ MQTT 3.1.0 → 升级到 3.1.1 → 内部 Broker (11883)
├─ MQTT 3.1.1 → 直接转发 → 内部 Broker (11883)
└─ MQTT 5.0 → 直接转发 → 内部 Broker (11884)
[router]
max_segment_size = 104857600 # 最大段大小 (100MB)
max_segment_count = 10 # 最大段数量
max_connections = 10000 # 最大连接数[v4.1.connections]
connection_timeout_ms = 60000 # 连接超时 (60秒)
max_client_id_len = 256 # 客户端ID最大长度
max_connections = 10000 # 最大连接数设置日志级别:
# Windows PowerShell
$env:RUST_LOG="info"; cargo run
# Linux/Mac
RUST_LOG=debug cargo run日志级别: error, warn, info, debug, trace
-
使用 Release 模式编译:
cargo build --release ./target/release/rustmqttserverdemo
-
配置防火墙:
- 开放端口 1883, 1884, 8080
-
配置 TLS/SSL (生产环境必须): 编辑
config.toml添加证书配置 -
性能优化:
- 根据实际需求调整
max_connections - 调整
max_segment_size和max_segment_count
- 根据实际需求调整
你可能会看到类似这样的日志:
[ERROR rumqttd::router::routing] [>] incoming; connection_id=0
这不是真正的错误! 这是 rumqttd 库的一个设计问题,它使用 ERROR 级别记录内部消息流跟踪。这些消息表示正常的路由流程:
[>]= 消息进入路由器[<]= 消息离开路由器
如果你想要更清晰的日志,可以设置环境变量:
$env:RUST_LOG="warn,rustmqttserverdemo=info,rumqttd::server::broker=info"如果端口被占用,修改 config.toml 中的端口配置。
删除 config.toml,重新运行程序会自动生成默认配置。
增加 connection_timeout_ms 的值。
✅ 革命性的单端口设计!
本 broker 通过智能协议适配器实现单端口多协议:
- 统一端口: 1883
- 支持协议: MQTT 3.1.0, 3.1.1, 5.0
- 自动检测: 读取 CONNECT 包识别协议版本
- 透明升级: MQTT 3.1.0 自动升级为 3.1.1
- 智能路由: 根据版本转发到对应的后端 broker
- 零配置: 客户端无需知道任何内部细节
优势:
- 🎯 简化部署 - 只需开放一个端口
- 🔄 向后兼容 - 支持所有旧设备
- ⚡ 高性能 - 异步零拷贝转发
- 🛡️ 灵活性 - 轻松添加新协议版本
MIT