Reactive Extensions是否适合公共汽车?

时间:2012-05-10 18:56:37

标签: system.reactive cqrs event-sourcing

我现在一直在使用Rx在单个应用程序中创建一个事件总线(想想CQRS / ES),它看起来效果很好。然而,在调查了一堆不同的Event Sourcing框架之后,我还没有看到Rx使用过一次。与基于反射/容器的调度程序相比,它看起来非常合适,但也许有一些我缺少的东西。我宁愿不花一大堆时间在一个有3个月的持续时间的东西上。是否有理由说Rx不适合?

谢谢, 埃里克

4 个答案:

答案 0 :(得分:9)

Rx对于事件驱动和反应式编程来说无疑是一个非常棒的框架。事实上,我会说限制自己使用IObservable接口进行调度实际上比任何更重的东西更好。然后,您自然会使用“消息传递”功能。导向风格,适合规模和不变性。关注点的分离变得很自然。

您将来可能遇到的问题是您的系统是否超出单个应用程序。 Rx在单个应用程序中非常简单,但只要您需要添加基础架构,就需要付出一些努力。你的申请之间。并不是说它不起作用!当您在SubjectIObservable个实例的不同来源中使用它时,它确实需要在某些情况下手动完成,而其他情况则需要采购。框架(你有什么想法?)可能有更大范围的外部适配器'。

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

其次,you - are - not - alone。包括某人who likes Rx so much for CQRS they want to do it in Scala and the JVM

答案 1 :(得分:4)

以下是a message bus in Rx

的示例

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:0)

如果要在.NET中使用支持Rx的内存总线,则应查看MemBus

另一种方法是使用ReactiveUI中的MessageBus。但是因为它没有在专用库中提供,所以你必须安装整个ReactiveUI库,这只在WPF应用程序中有意义,而不是在传统的WinForms项目中。