Rx java JavaSpringWebFlux与RxJava

Rx java JavaSpringWebFlux与RxJava,rx-java,reactive-programming,spring-webflux,project-reactor,Rx Java,Reactive Programming,Spring Webflux,Project Reactor,我开始学习Java中的反应式编程。整个反应范式对我来说都是新的 在我的学习过程中,我遇到了一些术语/库,如SpringWebFlux、projectreactor和RxJava。我希望有人能解释这些区别是什么,你在项目中使用了哪一个,以及你为什么做出这个选择 我读到SpringWebFlux实际上在内部使用projectreactor的Flux/Mono。这简化了SpringWebFlux优于RxJava的利弊问题?一般来说,基于JDK8的RxJava支持项目和支持JDK8+的ProjectRe

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

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


我读到SpringWebFlux实际上在内部使用projectreactor的Flux/Mono。这简化了SpringWebFlux优于RxJava的利弊问题?

一般来说,基于JDK8的RxJava支持项目和支持JDK8+的ProjectReactor。但是对于初学者来说,您可以先学习RxJava。由于项目反应器可以考虑它在RxJava的缺点,更适合后端开发。RxJava有太多的问题,如果不能很好地使用它,可能会导致内存不足。 但最后,如果您想很好地使用Spring5.2+,您需要学习RxJava->Reactor->NIO->Netty->Reactor Netty。

SpringWebFlux()和RxJava2+都是Spring的实现


Spring使用的是ProjectReactor,因此它得到了更多的支持、宣传,并且拥有更大的社区,所以我同意这一点

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

范式是由

另一方面,反应流是一种规范

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

反应流API仅由4个高接口组成

  • 出版商: 发布者是潜在无限数量的序列元素的提供者,根据从订阅者那里收到的需求发布它们
  • 订户: 将订阅服务器的实例传递给Publisher.subscribe(订阅服务器)后,将接收一次对订阅服务器.onSubscribe(订阅服务器)的调用
  • 订阅: 订阅表示订阅发布服务器的订阅服务器的一对一生命周期
  • 处理机 处理器代表一个处理阶段,它既是订阅者又是发布者,并且遵守订阅者和发布者的契约
  • 这些概念在不同的层次和领域有不同的表现形式。例如,java开发人员可以考虑如何在应用程序级别编程his,数据库工程师可以考虑数据库如何对反应式API调用作出反应(例如,Mongo DB实现了反应式流驱动程序),网络程序员可以考虑如何在网络级别有效地进行反应式调用

    一些遵循反应流规范的基于JVM的框架包括

    • 阿克卡流框架
    • 鼠笼
    • 垂直x
    • ReactiveX(rxjava2.x和Reactor)
    • Java1.9流类(您会注意到,反应流接口在Java9的流类下移动)
    ReactiveX是观察器模式、迭代器模式和函数式编程的最佳思想的组合。它扩展了observer模式以支持数据和/或事件序列,并添加了允许您以声明方式将序列组合在一起的运算符,同时将诸如低级线程、同步、线程安全、并发数据结构和非阻塞I/O之类的问题抽象出来


    RXJava2.0和Reactor基于ReactiveX项目。Spring WebFlux在内部使用反应堆。

    我确实读过关于它们的文章,但我很难做出决定,这就是我为什么要发布这个问题的原因。