🚀 RMQTT 0.15.0
这是一个标志性版本,历经多个 Beta 与 RC 迭代,核心框架全面升级,插件体系更加灵活,性能与内存占用显著优化,并带来更好的集群能力与运维体验。
🔧 核心框架与网络层
-
网络层模块化重构
- 基于 Tokio 异步运行时重写网络层,彻底移除 ntex 框架依赖,解耦并提升性能。
- 复用并优化 ntex-mqtt 编解码部分代码,兼顾成熟度与兼容性。
- 更小的会话/连接内存占用:移除 ntex-mqtt 运行时依赖,减少多余抽象和上下文开销,大规模并发场景下内存占用显著下降。
-
原生多协议支持
- 支持 TCP / TLS (MQTT over SSL) / WebSocket (WS) / WSS。
- 遵循 RFC 6455、RFC 8446 等标准,灵活配置接入通道。
-
多监听器并行绑定
- 单个 Broker 可同时启动多个 Listener,独立配置协议、端口、心跳、TLS 证书等。
- 新增 ListenerId,支持基于 ID 管理监听器。
- 支持内外网隔离、负载均衡与精细化运维。
⚡ 性能与存储优化
-
离线消息顺序性优化
- 改进消息投递机制,顺序更贴近发布时序。
max_inflight
可调节顺序一致性与吞吐性能的权衡。
-
Session 存储优化
- 存储操作后台任务化,提升并发性能。
- 增加统计指标与超时保护,metrics 支持 active/offline 会话区分。
-
存储模块化
- 存储后端(ram / sled / redis)完全模块化,通过 Cargo feature 裁剪。
- Retainer 与消息存储配置更灵活,日志与错误处理增强。
- Retainer 默认 TTL 调整:
retained_message_ttl
默认值由 1m → 0m(默认不过期)。
🛠 插件系统
-
插件系统升级
- 引入统一 meta-package,改进功能组织方式。
- 插件配置支持 构建器模式,默认配置与错误报告更清晰。
- 新增 register_named(),支持显式命名插件注册。
plugins_config_map_add
泛型化,配置更灵活。
-
插件架构改进
- Webhook / Auth-HTTP 插件:移除全局 HTTP client 与 once_cell,改为实例化管理。
- 插件初始化支持 config map。
- Bridge 插件:修复 MQTT v4/v5 下错误处理逻辑,移除
unreachable!()
,改为显式错误返回与日志记录。
🔗 集群与网络
-
集群 gRPC
-
支持基于 streaming 的消息转发。
-
新增并发与超时配置:
worker_threads
node_grpc_batch_size
node_grpc_client_concurrency_limit
node_grpc_client_timeout
-
-
Raft 升级
- 升级至 raft v0.5.x,支持异步快照生成、并行优化与压缩改进。
- 移除全局退避策略,改为实例化 ExponentialBackoff。
-
集群插件改进
- cluster-broadcast 新增健康状态监控。
- 订阅同步、错误处理与日志记录优化。
🌐 HTTP API 与可观测性
-
所有路由统一加上 /api/v1 前缀。
-
健康检查 API:
- 新增
/api/v1/health/check/{node}
,支持 JSON 输出。 - 通过 NodeHealthStatus.is_running() 判断节点状态。
- 新增
-
健康检查与 Prometheus 指标增强,支持集群初始化超时检测。
-
HTTP API 统计监控能力增强。
⚙️ 配置、构建与运维
- 插件初始化支持 config map 配置方式。
- Dockerfile 改进:ENTRYPOINT 支持运行时传参。
- 构建配置:启用
panic=abort
,减少运行时开销。 - 更新核心依赖,增强 tokio 特性支持。
- 日志清理与优化,覆盖集群、存储、网络模块。
- 新增安装方式:支持
cargo install rmqttd
一键安装部署。
🛡️ 稳定性与错误处理
- 系统范围减少
panic!
,统一改为显式错误返回。 - handshake 模块增加超时控制。
- 并发控制逻辑统一,线程管理更清晰。
- cluster、executor、storage、bridge 等模块增强错误日志与重试机制。
🔌 集成模式
-
库模式(Library Mode)
- 除了作为独立的 MQTT Broker/Server 使用外,RMQTT 还提供 库模式。
- 你可以将 RMQTT 作为 Rust crate 依赖,直接嵌入到自己的应用或服务中。
- 适合需要将 MQTT 功能与业务逻辑深度集成的场景,例如物联网平台、边缘计算服务或定制化网关。
🚀 快速开始(库模式示例)
下面展示了如何在项目中通过 库模式 使用 RMQTT,快速启动一个最基本的 MQTT Server。
在 Cargo.toml
中添加依赖:
[dependencies]
rmqtt = "0.15"
tokio = { version = "1", features = ["full"] }
simple_logger = "5"
log = "0.4"
在 main.rs
中:
use rmqtt::{context::ServerContext, net::Builder, server::MqttServer, Result};
use simple_logger::SimpleLogger;
#[tokio::main]
async fn main() -> Result<()> {
SimpleLogger::new().with_level(log::LevelFilter::Info).init()?;
let scx = ServerContext::new().build().await;
MqttServer::new(scx)
.listener(
Builder::new()
.name("external/tcp")
.laddr(([0, 0, 0, 0], 1883).into())
.bind()?
.tcp()?,
)
.build()
.run()
.await?;
Ok(())
}
运行后,你将得到一个运行在 0.0.0.0:1883
的 MQTT 服务端,可以直接用 MQTT 客户端进行连接和测试。
👉 更多库模式示例:RMQTT Examples
📚 文档与维护
-
文档 Rust 版本更新至 1.85.0。
-
更新
cluster-raft.md
,增加 raft 配置说明。 -
README 更新:
- 新增 DeepWiki 徽章、Crate 徽章。
- 简化版本引用,补充库模式集成说明。
-
所有插件版本与主版本 0.15.0 保持同步。
🎯 总结
- 更快:Tokio 网络栈、Raft 与 gRPC streaming 优化性能。
- 更轻:移除 ntex,显著减少会话/连接内存占用。
- 更灵活:存储模块化、插件 meta-package、多协议/多监听器支持。
- 更好用:支持
cargo install rmqttd
,配置更简洁,文档与可观测性全面升级。
💡 加入我们
RMQTT 正在不断迭代与成长,如果你对高性能 MQTT Broker 感兴趣,欢迎:
- 🌟 Star 本项目,第一时间获取更新
- 🛠️ 提交 Issue 或 PR,一起完善功能和生态
- 📖 分享与交流,帮助更多开发者发现 RMQTT
让我们一起把 RMQTT 打造成更快、更轻、更好用的 MQTT Broker 🚀
更新完整列表,请参阅 RMQTT Release Notes
Github: https://github.com/rmqtt/rmqtt
Ext Link: https://github.com/rmqtt/rmqtt
评论区
写评论还没有评论