Java Spring WebFlux 与 RxJava

问题描述 投票:0回答:4

我开始学习 Java 响应式编程。整个反应范式对我来说是新的。

在我的学习过程中,我遇到过一些术语/库,例如 Spring WebFlux、projectreactor 和 RxJava。我希望有人能解释一下它们之间的区别,以及您在项目中使用了哪一个,以及为什么做出了这一选择。

我读到Spring WebFlux实际上在内部使用了projectreactor的Flux/Mono。这简化了 Spring Webflux 相对于 RxJava 的优缺点的问题?

rx-java reactive-programming spring-webflux project-reactor
4个回答
27
投票

响应式编程是一种编程范式,但我不会称其为新的。它实际上已经存在了一段时间了。就像面向对象编程、函数式编程或过程式编程一样,反应式编程是另一种编程范式。

范式由 Reactive Manifesto

定义 另一方面,

Reactive Streams是一种规范。

对于 Java 程序员来说,Reactive Streams 是一个 API。它是来自 Kaazing、Netflix、Pivotal、Red Hat、Twitter、Typesafe 等众多公司的工程师合作的产物。 Reactive Streams 很像 JPA 或 JDBC。两者都是API规范。

Reactive Streams API 仅包含 4 个高级接口。

  1. 出版商: 发布者是潜在无限数量的排序元素的提供者,根据从其订阅者收到的需求来发布它们。
  2. 订阅者: 将订阅者实例传递给发布者后,将收到对 Subscriber.onSubscribe(Subscription) 的调用。订阅(订阅者)。
  3. 订阅: 订阅代表订阅者订阅发布者的一对一生命周期。
  4. 处理器: 处理器代表一个处理阶段——它既是订阅者又是发布者,并遵守两者的合同。

这些概念在不同层面、不同领域有不同的表现。例如。 java 开发人员可以考虑如何在应用程序级别进行编程,数据库工程师可以考虑数据库如何对反应式 API 调用做出反应(例如,Mongo DB 实现了反应式流驱动程序),网络程序员可以考虑如何反应式呼叫可以在网络级别生效。

一些遵循反应式流规范的基于 JVM 的框架是

  • Akka Streams 框架
  • 鼠群
  • 垂直x
  • ReactiveX(RxJava 2.x 和 Reactor)
  • Java 1.9 Flow 类(您会注意到 Reactive Streams 接口移至 Java 9 中的 Flow 类下)

ReactiveX 结合了观察者模式、迭代器模式和函数式编程的最佳思想。它扩展了观察者模式以支持数据和/或事件序列,并添加了运算符,允许您以声明方式将序列组合在一起,同时抽象出对低级线程、同步、线程安全、并发数据结构和非线程等问题的关注。阻塞 I/O。

RxJava 2.0和Reactor基于ReactiveX项目。而 Spring WebFlux 内部使用了 Reactor。


23
投票

一般来说,RxJava 支持基于 JDK8 的项目,Project Reactor 支持 JDK 8+。但对于初学者来说,可以先学习RxJava。既然Project Reactor你可以认为它修复了RxJava的缺陷并且更适合后端开发。 RxJava有太多的问题,如果你不能很好地使用它,可能会导致内存不足。 但最终,如果你想很好地使用Spring 5.2+,你需要学习RxJava->Reactor->NIO->Netty->Reactor netty。


15
投票

Spring WebFlux (project-reactor) 和 RxJava2+ 都是 reactive-streams 的实现。

Spring正在使用project-reactor,因此它得到了更多的支持、广告和更大的社区,所以我会同意。


-2
投票

我在Medium上遇到了this关于ReactiveProgramming的故事,这从字面上消除了我们对此的所有疑虑。阅读它并稍后感谢我。

© www.soinside.com 2019 - 2024. All rights reserved.