Java Spring WebFlux 与 RxJava
Java Spring WebFlux vs RxJava
我在 Java 开始学习响应式编程。整个反应范式对我来说都是新的。
在我的学习过程中,我遇到了一些terms/libraries,例如Spring WebFlux、projectreactor 和RxJava。我希望有人能解释一下有什么区别,你在项目中使用了哪一个,以及你为什么做出这个选择。
我读到 Spring WebFlux 实际上在内部使用了 projectreactor 的 Flux/Mono。这将问题简化为 Spring Webflux 相对于 RxJava?
的优缺点
一般来说,RxJava支持基于JDK8-的项目,Project Reactor支持JDK8+。但是对于初学者来说,可以先学习RxJava。自从Project Reactor你可以认为它修复了RxJava的缺点,更适合后端开发。 RxJava 有太多的问题,如果你不能很好地使用它,可能会导致内存不足。
但最后,如果你想用好Spring 5.2+,你需要学习RxJava->Reactor->NIO->Netty->Reactor netty
两个 Spring WebFlux (project-reactor) and RxJava2+ are implementation of reactive-streams.
Spring 正在使用 project-reactor,因此它得到更多支持、宣传并拥有更大的社区,所以我会选择它。
响应式编程是一种编程范式,但我不会称之为新的。它实际上已经存在了一段时间。就像 object-oriented 编程、函数式编程或过程式编程一样,响应式编程只是另一种编程范式。
定义
另一方面,Reactive Streams 是一种规范。
对于 Java 程序员来说,Reactive Streams 是 API。它是来自 Kaazing、Netflix、Pivotal、Red Hat、Twitter、Typesafe 和许多其他公司的工程师合作的产物。 Reactive Streams 很像 JPA 或 JDBC。两者都是 API 规格。
Reactive Streams API 仅包含 4 个高级接口。
- 出版商:
发布者是可能无限数量的排序元素的提供者,根据从其订阅者收到的需求发布它们。
- 订阅者:
在将 Subscriber 实例传递给 Publisher.subscribe(Subscriber) 后,将收到对 Subscriber.onSubscribe(Subscription) 的调用。
- 订阅:
订阅表示订阅者订阅发布者的 one-to-one 生命周期。
- 处理器
Processor 代表一个处理阶段——它既是 Subscriber 又是 Publisher 并且遵守两者的契约。
这些概念在不同层次和领域有不同的表现。例如。 java 开发人员可以考虑如何在应用程序级别对其进行编程,数据库工程师可以考虑数据库如何对反应性 API 调用做出反应(例如,Mongo 数据库已经实现了一个Reactive Streams 驱动程序),网络程序员可以考虑如何在网络级别使响应式调用有效。
一些遵循反应流规范的基于 JVM 的框架是
- Akka Streams 框架
- 鼠群
- Vert.x
- ReactiveX(RxJava 2.x 和 Reactor)
- Java 1.9 Flow classes(您会注意到 Reactive Streams 接口在 Java 9 中的 Flow class 下移动)
ReactiveX 结合了观察者模式、迭代器模式和函数式编程的最佳思想。它扩展了观察者模式以支持数据 and/or 事件序列,并添加了允许您以声明方式将序列组合在一起的运算符,同时抽象出对 low-level 线程、同步、thread-safety、并发等问题的关注数据结构,以及 non-blocking I/O.
RxJava 2.0 和 Reactor 基于 ReactiveX 项目。并且 Spring WebFlux 内部使用了 Reactor。
我在 Java 开始学习响应式编程。整个反应范式对我来说都是新的。
在我的学习过程中,我遇到了一些terms/libraries,例如Spring WebFlux、projectreactor 和RxJava。我希望有人能解释一下有什么区别,你在项目中使用了哪一个,以及你为什么做出这个选择。
我读到 Spring WebFlux 实际上在内部使用了 projectreactor 的 Flux/Mono。这将问题简化为 Spring Webflux 相对于 RxJava?
的优缺点一般来说,RxJava支持基于JDK8-的项目,Project Reactor支持JDK8+。但是对于初学者来说,可以先学习RxJava。自从Project Reactor你可以认为它修复了RxJava的缺点,更适合后端开发。 RxJava 有太多的问题,如果你不能很好地使用它,可能会导致内存不足。 但最后,如果你想用好Spring 5.2+,你需要学习RxJava->Reactor->NIO->Netty->Reactor netty
两个 Spring WebFlux (project-reactor) and RxJava2+ are implementation of reactive-streams.
Spring 正在使用 project-reactor,因此它得到更多支持、宣传并拥有更大的社区,所以我会选择它。
响应式编程是一种编程范式,但我不会称之为新的。它实际上已经存在了一段时间。就像 object-oriented 编程、函数式编程或过程式编程一样,响应式编程只是另一种编程范式。
定义 另一方面,Reactive Streams 是一种规范。
对于 Java 程序员来说,Reactive Streams 是 API。它是来自 Kaazing、Netflix、Pivotal、Red Hat、Twitter、Typesafe 和许多其他公司的工程师合作的产物。 Reactive Streams 很像 JPA 或 JDBC。两者都是 API 规格。
Reactive Streams API 仅包含 4 个高级接口。
- 出版商: 发布者是可能无限数量的排序元素的提供者,根据从其订阅者收到的需求发布它们。
- 订阅者: 在将 Subscriber 实例传递给 Publisher.subscribe(Subscriber) 后,将收到对 Subscriber.onSubscribe(Subscription) 的调用。
- 订阅: 订阅表示订阅者订阅发布者的 one-to-one 生命周期。
- 处理器 Processor 代表一个处理阶段——它既是 Subscriber 又是 Publisher 并且遵守两者的契约。
这些概念在不同层次和领域有不同的表现。例如。 java 开发人员可以考虑如何在应用程序级别对其进行编程,数据库工程师可以考虑数据库如何对反应性 API 调用做出反应(例如,Mongo 数据库已经实现了一个Reactive Streams 驱动程序),网络程序员可以考虑如何在网络级别使响应式调用有效。
一些遵循反应流规范的基于 JVM 的框架是
- Akka Streams 框架
- 鼠群
- Vert.x
- ReactiveX(RxJava 2.x 和 Reactor)
- Java 1.9 Flow classes(您会注意到 Reactive Streams 接口在 Java 9 中的 Flow class 下移动)
ReactiveX 结合了观察者模式、迭代器模式和函数式编程的最佳思想。它扩展了观察者模式以支持数据 and/or 事件序列,并添加了允许您以声明方式将序列组合在一起的运算符,同时抽象出对 low-level 线程、同步、thread-safety、并发等问题的关注数据结构,以及 non-blocking I/O.
RxJava 2.0 和 Reactor 基于 ReactiveX 项目。并且 Spring WebFlux 内部使用了 Reactor。