Skip to content

RemoteAll/RustMqttServerDemo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Rust MQTT Broker Demo

基于 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 连接)
  • 零配置 - 客户端无需知道后端细节

快速开始

1. 编译运行

cargo run

首次运行会自动生成 config.toml 配置文件。

2. 配置文件

编辑 config.toml 可以自定义:

  • 端口号
  • 最大连接数
  • 超时设置
  • 消息大小限制
  • 等等...

3. 测试连接

使用 mosquitto 客户端测试

所有 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 mqttv31

MQTT 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 mqttv311

MQTT 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 mqttv5

WebSocket:

# 使用 WebSocket 连接
mosquitto_sub -h localhost -p 8080 -t "test/topic" -V mqttv311

使用 MQTTX 图形界面

  1. 下载 MQTTX
  2. 创建新连接:
    • Host: localhost
    • Port: 1883 (MQTT 3.1.1) 或 1884 (MQTT 5.0)
    • Protocol: mqtt://

配置说明

端口配置

  • 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

生产部署建议

  1. 使用 Release 模式编译:

    cargo build --release
    ./target/release/rustmqttserverdemo
  2. 配置防火墙:

    • 开放端口 1883, 1884, 8080
  3. 配置 TLS/SSL (生产环境必须): 编辑 config.toml 添加证书配置

  4. 性能优化:

    • 根据实际需求调整 max_connections
    • 调整 max_segment_sizemax_segment_count

故障排查

日志中的 ERROR 信息

你可能会看到类似这样的日志:

[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
  • 零配置: 客户端无需知道任何内部细节

优势:

  • 🎯 简化部署 - 只需开放一个端口
  • 🔄 向后兼容 - 支持所有旧设备
  • ⚡ 高性能 - 异步零拷贝转发
  • 🛡️ 灵活性 - 轻松添加新协议版本

License

MIT

About

Rust MqttServer Demo

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages