35

我看到许多框架/库声称它们可以帮助在 Java 中构建反应式应用程序,例如:Akka、Vert.x、RxJava、Reactor、QBit 等。

它们似乎有不同的方法、功能、优点、缺点等。我找不到详细的比较。有关于这些框架中的每一个的文档,但对我来说理解这些差异是不够的。

主要的 Java 反应式框架之间有什么区别?

哪些应用程序要求可以推动 Java 反应式框架的选择?

感谢您的时间。

4

1 回答 1

39

我正在研究 RxJava,最近我对 Akka-Streams 和 Reactor进行了一些评估。

据我所知,所有库都集中在一个名为Reactive-Streams的概念上,因此您可以在实现之间来回切换。

我相信RxJava是最通用的,对其他库的依赖为零,并且对并发性没有意见。它在 Android 上非常流行,主要是由于其他库/框架(如 Retrofit)的支持。1.x 分支没有实现 Reactive-Streams 但有它的包装器,而 2.x 原生兼容 Reactive-Streams(目前在预览版中可用)。许多流行的基于 JVM 的编程语言都有针对它的适配器(Scala、Kotlin、Clojure 等)。

Reactor是 Reactive-Streams 兼容的,因为它是更新的库。他们对许多其他库有依赖/支持。当涉及到流中的并发和排队(即 LMAX Disruptor 风格)时,他们选择了一组不同的折衷方案。它和 RxJava 之间有一些关于运算符的来回讨论,我们已经开始讨论拥有一个共享的运算符池。

Akka高度由类似 Scala 的概念主导;我在让它工作时遇到了一点小麻烦。它背后的团队参与了 Reactive-Streams 规范的开发,并且有一个 Akka-Streams 库被宣传为支持 Reactive-Streams,但是,访问它很麻烦,因为它的流畅 API 与 Akka actor 模型紧密交织在一起。

如果您在服务器/桌面/Android 端,RxJava 通常是一个不错的选择(而且我相信它的文档比其他更好)并且针对高吞吐量异步操作。如果您更关注延迟方面,Reactor 可能是更好的选择。我不太了解 Akka-Streams 的用法,但我在一年前看到一个基准测试,其中围绕 Akka 构建的 Web 服务器的性能优于 Tomcat 和 Netty+RxJava。

于 2015-11-12T15:26:22.253 回答