15

我一直在使用 Rx 在单个应用程序中创建事件总线(想想 CQRS/ES),它似乎工作得很好。然而,在调查了一堆不同的事件溯源框架之后,我还没有看到使用过一次 Rx。与基于反射/容器的调度程序相比,它似乎非常适合,但也许我缺少一些东西。我宁愿不花很多时间在 3 个月内大获成功的事情上。Rx 不适合有什么原因吗?

谢谢,埃里克

4

4 回答 4

9

Rx 绝对是一个出色的事件驱动和反应式编程框架。事实上,我会说将自己限制在IObservable用于调度的接口实际上是比任何更重的重量更好的形式。然后,您自然会使用面向“消息传递”的风格,这种风格非常适合规模化和不变性。关注点分离变得很自然。

将来您可能会遇到的困难是您的系统是否超出了单个应用程序。Rx 在单个应用程序中非常简单,但是一旦您需要在应用程序之间添加“基础设施”,就需要付出一些努力。并不是说它不起作用!确实如此,当您为您的实例SubjectIObservable实例寻找不同的来源时——它只需要在某些情况下手动完成,而其他“事件溯源”框架(您的想法是什么?)可能有更大范围的外部“适配器” '。

关于通常以这种方式使用 Rx(即,在互联网上)。首先,请记住,除了 .NET 之外还有许多其他平台,Rx 不会出现在其中任何一个平台中。反应式风格可能会使用不同的名称。

其次,不是一个。_ _ 包括那些非常喜欢 Rx 的 CQRS 的人,他们想在 Scala 和 JVM 中实现它

于 2012-05-10T20:55:58.270 回答
4

这是Rx 中的消息总线示例

于 2012-05-10T23:15:51.507 回答
1

如果您想在两个进程之间使用 RX,请查看:

  • NetMQ.ReactiveExtensions。这是一个 RX 包装器,它使用 ZeroMQ 在网络上传输消息。
  • 观察
  • Kafka 上的任何 RX 包装器。
  • 任何进程间消息传递系统上的任何 RX 包装器,例如 RabbitMQ。

所有这些库都在做同样的事情:它们实现了 Microsoft 的 IObservable 和 IObserver 接口。

于 2016-11-12T10:42:24.640 回答
0

如果您想在 .NET 中使用支持 Rx 的 In-Memory Bus,那么您应该查看MemBus

另一种方法是MessageBusReactiveUI使用。但是因为它没有在专用库中发布,所以您必须安装整个 ReactiveUI 库,这仅在 WPF 应用程序中有意义,而不是在旧版 WinForms 项目中。

于 2016-10-11T12:34:24.043 回答