Java反应框架的比较

Flo*_*umé 29 java reactive-programming akka rx-java project-reactor

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

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

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

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

感谢您的时间.

aka*_*okd 36

我正在研究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-style),他们选择了一组不同的权衡.它与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 ) (3认同)