2015-11-12 14 views
19

Vedo molti framework/librerie che sostengono che essi possono aiutare a costruire applicazioni reattive in Java, come ad esempio: Akka, Vert.x, RxJava, Reattore, Qbit, eccConfronto di Java quadri reattivi

Sembrano hanno approcci, caratteristiche, vantaggi, svantaggi, ecc. diversi. Non sono riuscito a trovare confronti dettagliati. C'è una documentazione su ciascuno di questi lavori di framer, ma non è abbastanza per me capire le differenze.

Quali sono le differenze tra i principali framework reattivi Java?

E quali sono i requisiti dell'applicazione che possono guidare la scelta di un framework reattivo Java?

Grazie per il vostro tempo.

+1

Mentre akka è per java, il suo core è costruito usando scala e il modello dell'attore. Brilla quando si usa lo scala poiché è più adatto alla programmazione funzionale. Il modello degli attori degli utenti di Akka, mentre RxJava utilizza qualcosa chiamato modello di osservatore. Se si utilizza scala, quindi scegliere Akka, se si è un negozio java, quindi scegliere RxJava. Sono utilizzati da alcuni grandi nomi e sono adatti ai sistemi di produzione. – Madusudanan

+1

A proposito, sto bene con domande come questa, ma i puristi di SO potrebbero etichettare questa domanda come troppo aperta. Solo un avviso. –

+0

Qualsiasi cosa tu usi, devi comunque generare il flusso. Dai un'occhiata a questo articolo che ho scritto il mese scorso: http://www.coopsoft.com/ar/ReactiveArticle.html – edharned

risposta

22

Sto lavorando su RxJava e recentemente ho eseguito alcuni evaluations su Akka-Streams e Reactor.

Per quanto posso dire con tutte le librerie, convergono in un unico concetto chiamato Reactive-Streams in modo da poter andare avanti e indietro tra le implementazioni.

Credo che RxJava è il più generico di tutti, ha zero dipendenze su altre librerie e non è supponente sulla concorrenza. È molto popolare su Android principalmente grazie al supporto di altre librerie/framework come Retrofit. Il ramo 1.x non implementa Reactive-Streams ma ha wrapper per esso considerando che 2.x è nativamente compatibile con Reactive-Streams (attualmente disponibile in anteprima). Molti linguaggi di programmazione basati su JVM hanno adattatori per esso (Scala, Kotlin, Clojure, ecc.).

Il reattore è conforme agli Stream Reactive poiché è una libreria più recente. Hanno dipendenze/supporto per molte altre librerie. Hanno scelto un diverso insieme di compromessi per quanto riguarda la concorrenza e l'accodamento nei flussi (ad esempio, in stile LMAX Disruptor). Ci sono stati alcuni avanti e indietro tra questo e RxJava per quanto riguarda gli operatori e abbiamo iniziato a parlare di avere un pool condiviso di operatori.

Akka è fortemente dominato da concetti simili a Scala; Ho avuto un piccolo problema a farlo funzionare. Il team dietro di esso è stato coinvolto nello sviluppo delle specifiche Reactive-Streams e c'è una libreria Akka-Streams che è pubblicizzata per supportare Reactive-Streams, tuttavia, l'accesso è ingombrante perché la sua fluente API è fortemente intrecciata con il modello di attore Akka.

Se si è sul lato server/desktop/Android, RxJava è generalmente una buona scelta (e credo sia documentato meglio degli altri) e si rivolge a operazioni asincrone ad alto throughput. Se sei più sul lato di latenza, Reactor potrebbe essere una scelta migliore. Non conosco molto bene gli usi di Akka-Streams, ma un anno fa ho visto un benchmark in cui un server web costruito attorno ad Akka ha superato quelli di Tomcat e Netty + RxJava.

+1

Venendo da questa famosa risposta, volevo sottolineare che da allora Reactor si è evoluto per essere più simile a RxJava2, come Reactor 3 (implementando pienamente i flussi reattivi, un sacco di vocabolario dell'operatore in comune, senza dipendenze, ma basato su java 8) –