【问题标题】:Java Spring WebFlux vs RxJavaJava Spring WebFlux 与 RxJava
【发布时间】:2019-10-21 00:13:54
【问题描述】:

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

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

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

【问题讨论】:

  • 我确实读过它们,但我很难决定,这就是我发布这个问题的原因。

标签: rx-java reactive-programming spring-webflux project-reactor


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    范式由Reactive Manifesto定义

    Reactive Streams,另一方面,是一种规范。

    对于 Java 程序员来说,Reactive Streams 是一种 API。它是来自 Kaazing、Netflix、Pivo​​tal、Red Hat、Twitter、Typesafe 和许多其他公司的工程师合作的产物。 Reactive Streams 很像 JPA 或 JDBC。两者都是 API 规范。

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

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

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

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

    • Akka Streams 框架
    • 老鼠包
    • Vert.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。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-18
        • 2020-05-04
        • 2021-08-17
        • 2019-08-12
        • 2021-11-09
        • 2020-12-28
        • 2023-01-26
        • 2018-08-26
        相关资源
        最近更新 更多