我开始学习Java响应式编程,整个响应式范式对我来说是新的。
在我的学习过程中,我遇到了一些术语/库,例如Spring WebFlux、projectreactor和RxJava。我希望有人能解释一下它们之间的区别,并告诉我你在项目中使用的是哪一个,为什么做出这种选择。
我看到Spring WebFlux实际上在内部使用projectreactor的Flux/Mono。这简化了问题:Spring Webflux相比RxJava的优缺点是什么?
我开始学习Java响应式编程,整个响应式范式对我来说是新的。
在我的学习过程中,我遇到了一些术语/库,例如Spring WebFlux、projectreactor和RxJava。我希望有人能解释一下它们之间的区别,并告诉我你在项目中使用的是哪一个,为什么做出这种选择。
我看到Spring WebFlux实际上在内部使用projectreactor的Flux/Mono。这简化了问题:Spring Webflux相比RxJava的优缺点是什么?
响应式编程是一种编程范式,但我不会称它为新事物。实际上,它已经存在了一段时间。就像面向对象编程、函数式编程或过程式编程一样,响应式编程也是另一种编程范式。
范式的定义由Reactive Manifesto决定。
反应式流则是一个规范。
对于Java程序员来说,反应式流是一个API。它是Kaazing、Netflix、Pivotal、Red Hat、Twitter、Typesafe等工程师之间合作的产物。反应式流很像JPA或JDBC。两者都是API规范。
反应式流API只包含4个高级接口。
ReactiveX 是观察者模式、迭代器模式和函数式编程中最佳思想的结合。它扩展了观察者模式以支持数据和/或事件序列,并添加了运算符,允许您在声明性地组合序列的同时抽象出关于底层线程、同步、线程安全、并发数据结构和非阻塞 I/O 等方面的问题。
RxJava 2.0 和 Reactor 基于 ReactiveX 项目。Spring WebFlux 在内部使用 Reactor。
一般来说,RxJava适用于基于JDK8-的项目,而Project Reactor支持JDK8+。但对于初学者,可以先学习RxJava。因为Project Reactor可以考虑修复RxJava中的缺点,并更适合后端开发。RxJava存在太多问题,如果您无法好好使用它,可能会导致内存溢出。
但最终,如果您想很好地使用Spring 5.2+,您需要从RxJava->Reactor->NIO->Netty->Reactor netty学起。
Spring WebFlux(project-reactor)和RxJava2+都是reactive-streams的实现。
Spring使用project-reactor,因此得到更多支持、推广和更大的社区,所以我建议选择它。