35

Akka、Vert.x、RxJava、Reactor、QBit など、Java でのリアクティブ アプリケーションの構築に役立つと主張する多くのフレームワーク/ライブラリを目にします。

アプローチ、機能、長所、短所などが異なるようです。詳細な比較は見つかりませんでした。これらの各フレームワークに関するドキュメントがありますが、違いを理解するには不十分です。

主要な Java リアクティブ フレームワークの違いは何ですか?

また、Java リアクティブ フレームワークの選択を後押しするアプリケーション要件は何ですか?

お時間をいただきありがとうございます。

4

1 に答える 1

39

私は RxJava に取り組んでおり、最近 Akka-Streams と Reactor でいくつかの評価を行いました。

私が知る限り、すべてのライブラリーはReactive-Streamsと呼ばれる単一の概念に収束しているため、実装間を行き来することができます。

RxJavaはすべての中で最も汎用的であり、他のライブラリへの依存関係がなく、同時実行性について意見が分かれていないと思います。主に Retrofit などの他のライブラリ/フレームワークによるサポートにより、Android で非常に人気があります。1.x ブランチは Reactive-Streams を実装していませんが、そのためのラッパーがありますが、2.x はネイティブに Reactive-Streams に準拠しています (現在プレビューで利用可能)。多くの一般的な JVM ベースのプログラミング言語には、それ用のアダプターがあります (Scala、Kotlin、Clojure など)。

Reactorはより新しいライブラリであるため、Reactive-Streams に準拠しています。それらには、他の多くのライブラリに対する依存関係/サポートがあります。彼らは、並行性とストリームでのキューイングに関して、別の一連のトレードオフを選択しました (つまり、LMAX ディスラプター スタイル)。オペレーターに関して RxJava との間でいくつかのやり取りがあり、オペレーターの共有プールを持つことについて話し始めました。

Akkaは、Scala に似た概念に大きく支配されています。私はそれを機能させるのに少し問題がありました。その背後にあるチームは Reactive-Streams 仕様の開発に関与しており、Reactive-Streams をサポートすることが宣伝されている Akka-Streams ライブラリがありますが、その流暢な API は Akka アクター モデルと深く絡み合っているため、アクセスするのは面倒です。

サーバー/デスクトップ/Android 側にいる場合、RxJava は一般的に適切な選択であり (他のものよりも文書化されていると思います)、高スループットの非同期操作を目的としています。レイテンシー側にいる場合は、Reactor の方が適している可能性があります。私は Akka-Streams の使用法についてはあまり知りませんが、1 年前に Akka を中心に構築された Web サーバーが Tomcat および Netty+RxJava よりも優れたベンチマークを見ました。

于 2015-11-12T15:26:22.253 に答える