Pub/Sub Vs Observer Vs Reactive

won*_*rld 7 publish-subscribe reactive-programming observer-pattern

当我之前使用像MVVMLight之类的Pub/Sub模式框架时,我已经看到订阅者的调用是同步处理的.从可扩展性的角度来看,像Rx这样的反应式框架是否有助于将pub和sub完全解耦和扩展的可伸缩性?哪种模式有助于扩展?

Dim*_*mos 5

我不知道 MVVMLight 的具体细节,但总的来说,Pub/Sub是一种模式,其中:

  • 发布者和订阅者互不了解。他们只知道一个代理,他们在那里发布/消费消息。
  • 因此,消息的发布和消费是异步完成的,完全解耦。这意味着发布/消费端可以独立扩展,并且在一个部分出现故障的情况下,另一部分能够继续工作。

现在,反应式编程是一种用于对更改及其在多个参与者之间的传播进行建模的模式。因此,它不太关心实现细节,而是更关注提供抽象的、声明性的接口,这使得处理事件流和在它们之上执行处理变得更容易。直接来自 ReactiveX 的文档:

ReactiveX 不偏向于某些特定的并发或异步源。可以使用线程池、事件循环、非阻塞 I/O、actor(例如来自 Akka)或任何适合您的需求、您的风格或您的专业知识的实现来实现 Observable。客户端代码将其与 Observables 的所有交互视为异步,无论您的底层实现是阻塞还是非阻塞,以及您选择如何实现它。

因此,解耦/可扩展性将主要取决于下面使用的实现;该框架的主要好处主要是提供了抽象的、声明性的接口。

关于观察者模式(在问题标题中提到):它是一个相当低级的原语,可用于实现相同的目标,但可能会导致更复杂的代码库。有关观察者模式与更抽象的反应式框架相比的陷阱的更多详细信息,您可以阅读以下论文:

使用 Scala.React 弃用观察者模式