我开始学习 Java 响应式编程。整个反应范式对我来说是新的。
在我的学习过程中,我遇到过一些术语/库,例如 Spring WebFlux、projectreactor 和 RxJava。我希望有人能解释一下它们之间的区别,以及您在项目中使用了哪一个,以及为什么做出了这一选择。
我读到Spring WebFlux实际上在内部使用了projectreactor的Flux/Mono。这简化了 Spring Webflux 相对于 RxJava 的优缺点的问题?
响应式编程是一种编程范式,但我不会称其为新的。它实际上已经存在了一段时间了。就像面向对象编程、函数式编程或过程式编程一样,反应式编程是另一种编程范式。
定义 另一方面,Reactive Streams是一种规范。
对于 Java 程序员来说,Reactive Streams 是一个 API。它是来自 Kaazing、Netflix、Pivotal、Red Hat、Twitter、Typesafe 等众多公司的工程师合作的产物。 Reactive Streams 很像 JPA 或 JDBC。两者都是API规范。
Reactive Streams API 仅包含 4 个高级接口。
这些概念在不同层面、不同领域有不同的表现。例如。 java 开发人员可以考虑如何在应用程序级别进行编程,数据库工程师可以考虑数据库如何对反应式 API 调用做出反应(例如,Mongo DB 实现了反应式流驱动程序),网络程序员可以考虑如何反应式呼叫可以在网络级别生效。
一些遵循反应式流规范的基于 JVM 的框架是
ReactiveX 结合了观察者模式、迭代器模式和函数式编程的最佳思想。它扩展了观察者模式以支持数据和/或事件序列,并添加了运算符,允许您以声明方式将序列组合在一起,同时抽象出对低级线程、同步、线程安全、并发数据结构和非线程等问题的关注。阻塞 I/O。
RxJava 2.0和Reactor基于ReactiveX项目。而 Spring WebFlux 内部使用了 Reactor。
一般来说,RxJava 支持基于 JDK8 的项目,Project Reactor 支持 JDK 8+。但对于初学者来说,可以先学习RxJava。既然Project Reactor你可以认为它修复了RxJava的缺陷并且更适合后端开发。 RxJava有太多的问题,如果你不能很好地使用它,可能会导致内存不足。 但最终,如果你想很好地使用Spring 5.2+,你需要学习RxJava->Reactor->NIO->Netty->Reactor netty。
Spring WebFlux (project-reactor) 和 RxJava2+ 都是 reactive-streams 的实现。
Spring正在使用project-reactor,因此它得到了更多的支持、广告和更大的社区,所以我会同意。
我在Medium上遇到了this关于ReactiveProgramming的故事,这从字面上消除了我们对此的所有疑虑。阅读它并稍后感谢我。