Java反应式框架的比较[关闭]

Posted

技术标签:

【中文标题】Java反应式框架的比较[关闭]【英文标题】:Comparison of Java reactive frameworks [closed] 【发布时间】:2016-02-13 18:50:56 【问题描述】:

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

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

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

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

感谢您的宝贵时间。

【问题讨论】:

虽然 akka 是用于 java 的,但它的核心是使用 scala 和 actor 模型构建的。使用 scala 时它会发光,因为它更自然地适合函数式编程。 Akka 使用 Actor 模型,而 RxJava 使用称为观察者模式的东西。如果您使用的是 scala,则选择 Akka,如果您是 java 商店,则选择 RxJava。两者都被一些大牌使用,非常适合生产系统。 顺便说一句,我对这样的问题很好,但是 SO 的纯粹主义者可能会将这个问题标记为过于开放。只是提醒一下。 无论你使用什么,你仍然需要生成流。看看我上个月写的这篇文章:coopsoft.com/ar/ReactiveArticle.html 谢谢你们提供的额外信息。 我写了一篇 RxJava2/Reactor 和 Akka Streams API 的比较文章。也许有用:gitlab.com/artur.jablonski.pl/akka_streams_vs_rx_reactor 【参考方案1】:

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

据我所知,所有库都集中在一个名为 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。

【讨论】:

看到这个流行的答案,我想指出,从那时起,Reactor 已经演变为与 RxJava2 更相似,如 Reactor 3(完全实现反应流,许多共同的运算符词汇,无依赖,但基于 java 8)

以上是关于Java反应式框架的比较[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

反应类似的JavaScript库[关闭]

C ++单元测试框架的比较[关闭]

您如何将基于 Scala 的 Web 服务器与其他 Web 框架进行比较? [关闭]

比较Java中的两个声音(有容差)[关闭]

如何在java中比较两个图像的高度和宽度[关闭]

比较 Java 内存堆转储:Java 桌面应用程序的内存分析 [关闭]