Java 个响应式框架的比较

Comparison of Java reactive frameworks

我看到很多 frameworks/libraries 声称他们可以帮助在 Java 中构建响应式应用程序,例如:Akka、Vert.x、RxJava、Reactor、QBit等

他们似乎有不同的方法、特点、优点、缺点等。我找不到详细的比较。有关于这些框架的文档,但我无法理解它们之间的差异。

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

可以推动选择 Java 反应式框架的应用程序要求是什么?

感谢您的宝贵时间。

我正在研究 RxJava,最近我在 Akka-Streams 和 Reactor 上做了一些 evaluations

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

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

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

Akka 高度被类似 Scala 的概念所支配;我在让它工作时遇到了一些小麻烦。它背后的团队参与了 Reactive-Streams 规范的开发,并且有一个 Akka-Streams 库被宣传为支持 Reactive-Streams,但是,访问它很麻烦,因为它的 fluent API 与 Akka 密切相关演员模型。

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