Rx(Reactive Extensions)和 MQTT
Rx(Reactive Extensions)和 MQTT 虽然都是“推送-订阅”范式,但用途和定位完全不同,我们可以从以下几个方面对比,来确定在实际开发中选择哪种方案比较合适:
📌 一句话总结
| 场景 | 建议使用 |
|---|---|
| 进程内或同一应用中的高效、精细化数据流处理 | ✅ Rx.NET |
| 跨设备、跨进程、网络中通信(如设备上报、服务间通信) | ✅ MQTT |
🧠 核心区别
| 特性 | Rx.NET | MQTT |
|---|---|---|
| 🔄 通信方式 | 内存中对象流(进程内) | 基于 TCP/IP 的消息协议(跨进程/设备) |
| 📍 使用场景 | UI 更新、数据流处理、事件编排、LINQ风格操作 | IoT 设备通信、远程数据上报、服务间消息推送 |
| 📡 订阅方式 | 代码中 .Subscribe() | 向消息 Broker 订阅 Topic |
| 🚀 性能 | 超高效(在内存中) | 有网络/协议开销 |
| 🧱 第三方依赖 | 无 | 需要 MQTT Broker(如 EMQX、Mosquitto) |
| ❄️ 保留消息 | ❌ 不支持 | ✅ 支持 Retained Message |
| 📦 消息可靠性 | 不支持 QoS | ✅ 支持 QoS 0/1/2 |
| TPL Dataflow | System.Threading.Tasks.Dataflow | 数据流块(System.Threading.Tasks.Dataflow) |
| TPL Dataflow | System.Threading.Tasks.Dataflow | 数据流块(System.Threading.Tasks.Dataflow) |
✅ 使用 Rx.NET 的最佳场景
实时 UI 数据更新(如实时图表、状态面板);
多通道、多条件组合的数据处理;
管道式/响应式处理(例如:过滤、聚合、节流);
与 ObservableCollection, WPF, MVVM 配合;
不需要跨网络通信;
示例:
observable.Where(x => x.Value > 10)
.Buffer(TimeSpan.FromSeconds(1))
.ObserveOnDispatcher()
.Subscribe(list => UpdateChart(list));
✅ 使用 MQTT 的最佳场景
IoT 设备 -> 云服务通信;
多台采集设备的数据汇总;
跨主机/进程的数据推送;
分布式系统中的解耦通信(如微服务架构);
数据需要从远程持久化、掉线后恢复、需要 QoS;
示例场景:
采集器 A 在机器上采集数据,并通过 MQTT 推给可视化系统;
云端服务订阅多个设备的数据汇总进行告警分析;
🧠 混合方案建议(很多项目会混用)
| 层 | 推荐工具 | 说明 |
|---|---|---|
| UI展示、实时流处理 | ✅ Rx.NET | 内部内存流高效处理 |
| 数据采集传输(设备 → 服务器) | ✅ MQTT | 网络传输与可靠通信 |
| 后端总线(多个微服务) | ✅ MQTT / Kafka / RabbitMQ | 解耦、异步处理 |
💡 场景建议
例如上位机数据采集项目特点:
实时采集数据 ✅;
本地 UI 可视化 ✅;
多图表多通道订阅 ✅;
图表控件在进程内 ✅;
所以 强烈推荐使用 Rx.NET,它轻量、灵活、无需额外服务,性能极高。
如果将来我们要从远程设备拉数据,那时再考虑引入 MQTT、Kafka 等消息中间件。
一个典型的 MQTT 架构图,展示了设备采集、数据发布、Broker 中转、以及前端/后端多客户端订阅的完整流程:
📡 MQTT 架构逻辑图(采集 + Broker + 可视化订阅)

📌 架构说明
| 组件 | 作用 |
|---|---|
| 设备 A | 使用 MQTT 客户端库将通道数据以 Topic 发布出去,例如 /device/a/temp、/device/a/vib |
| MQTT Broker | 中转所有消息,负责将消息推送给所有订阅者(如 Mosquitto、EMQX) |
| 前端可视化客户端 | 使用 MQTT 客户端订阅需要的 Topic,然后将数据推送给图表控件 |
| 后端服务 | 可订阅所有 Topic,执行:数据库写入、告警触发、分析处理等 |
✅ 适用场景
多设备分布采集;
设备在局域网或公网部署;
需要不同模块灵活订阅不同通道数据;
对可靠性/掉线重连/消息持久化有需求;
📦 示例 Topic 命名建议
/device/{id}/channel/{name}
/device/A001/temp
/device/A001/vib
/device/B002/temp

浙公网安备 33010602011771号