< 返回版块

ttyy 发表于 2025-08-30 11:42

Tags:mqtt broker,iot


🚀 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

评论区

写评论

还没有评论

1 共 0 条评论, 1 页