响应式扩展是否适合用于总线?

15

我最近使用Rx创建了一个事件总线(类似于CQRS/ES)用于单个应用程序,效果很好。然而,在调查了许多不同的事件溯源框架之后,我没有看到过使用Rx的情况。与反射/容器基础的调度器相比,它似乎非常适合,但也许有些东西我没有注意到。我不想在三个月内遇到无法解决的问题而浪费太多时间。Rx不适合的原因是什么?

谢谢, Erick

4个回答

9
Rx是一种非常出色的事件驱动和响应式编程框架。实际上,我认为仅限于使用IObservable接口进行分发比任何更重量级的形式都要好。这样你自然而然地使用了“消息”导向的风格,这有利于扩展和不可变性。关注点分离变得自然。
未来你可能会在系统超出单个应用程序时遇到困难。在单个应用程序中,Rx非常简单,但是一旦需要在应用程序之间添加“基础架构”,就需要付出一些努力。并不是说它不能工作!当你为你的Subject和IObservable实例引入不同的来源时,它确实可以工作-只是在某些情况下需要手动完成,而其他“事件源”框架(你想到了什么?)可能具有更大范围的外部“适配器”。
关于Rx在互联网上的通用使用方式。首先,请记住除了.NET之外还有许多其他平台,Rx不会在其中任何一个平台上显示。响应式风格可能会在不同名称下出现。
其次, - - - 孤单的。其中包括一些非常喜欢使用Scala和JVM实现CQRS的Rx爱好者

感谢您的热烈回应!如果您有关于如何在不同系统之间使用Rx的任何指导意见,那就太好了。目前,我的计划是从Rx中退出到队列系统,然后在另一端再次进入Rx。 - Erick T
这真的取决于队列系统本身如何实现。但这应该不是任何问题。与 Rx 用于任何事情没有什么不同(也就是说,一端总是有一些“真实世界”的东西)。一个例子:https://dev59.com/K2sz5IYBdhLWcg3wR1vC - yamen
1
值得注意的是,自从Rx发布以来,它已经被移植到JS,并且我最近也看到了一个Java版本的移植。当您使用Rx时,并不完全依赖于.Net。 - Bryan Anderson

4

这个链接已损坏。 - Contango

1
如果您想在两个进程之间使用RX,请查看以下内容:
  • NetMQ.ReactiveExtensions。这是一个RX包装器,它使用ZeroMQ在网络上传输消息。
  • Obvs
  • 任何Kafka上的RX包装器。
  • 任何跨进程消息传递系统(例如RabbitMQ)上的RX包装器。

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


0
如果你想使用支持在.NET中使用Rx的内存总线,则应该查看MemBus
另一种选择是使用ReactiveUI中的MessageBus。但由于它没有作为一个专用库发布,所以你必须安装整个ReactiveUI库,这只有在WPF应用程序中才有意义,而不是在遗留的WinForms项目中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接