Programarea reactiva Java. Implementari

Luxoft Training
2 min readDec 29, 2021

--

In acest articol vom aborda implementarea reactive streams.

Implementare

Hai sa luam in considerare implementarile existente ale reactive streams:

  • RxJava. Acesta librarie este implementata pentru diferite limbaje. In afara de RxJava, avem si Rx pentru C#, JS, Kotlin, Scala, etc
  • Reactor Core. A fost creata sub umbrela Spring si este inclusa in Spring 5
  • Akka streams de la Martin Odersky, creatorul Scala. A creat un Akka framework (abordare cu Actor). Si Akka streams care sunt o implementare a reactive streams si lucreaza cu bine cu acest framework

Aceste implementari sunt asemanatoare. Toate implementeaza specificatii Java 9 reactive streams. Hai sa ne uitam mai atent la Spring Reactor.

Functia ar putea sa returneze …

Hai sa rezumam ce poate returna o functie:

Single/Synchronous

O functie ordinara returneaza o singura valoare si face acest lucru sincronizat.

Multiple/Synchronous

Daca folosim Java 8, putem returna un data stream dintr-o functie. Cand au fost returnate mai multe valori, acestea pot sa fie trimise catre procesare. Dar nu putem trimite datele catre procesare inainte de a fi trimise — Streams functioneaza doar sincronizat.

Single/Asynchronous

Aici folosim deja abordarea asincrona, dar functia returneaza doar o valoare:

  • Fie CompletableFuture (Java) si apoi dupa o anumita perioada de timp, primim un raspuns asincron
  • Sau Mono care returneaza o valoare in Spring Reactor library
  • Multiple/Asynchronous

Si aici avem reactive streams. Sunt asincrone, adica returneaza valori nu imediat ci dupa o anumita perioada de timp. In cadrul acestei optiuni putem obtine un stream de date, care va fi extins in timp. Asa ca vom combina beneficiile Streams, care ne permit sa returnam un lant de valori, si asincronicitate care ne permite sa amanam returnarea valorilor.

Spre exemplu, tu citesti un fisier, si aceasta se schimba. In cazul Single/Asynchronous, obtinem un intreg fisier dupa ceva timp. In cazul Multiple/Asynchronous, obtinem un data stream dintr-un fisier, pe care putem sa incepem sa il procesam imediat. Putem, simultan, sa citim date si sa il procesam si, posibil, sa il scriem undeva. Reactive asynchronous streams sunt apelate:

  • Publisher (in Java 9 spec)
  • Observable (in RxJava)
  • Flux (in Spring Reactor)

Articolul original poate sa fie citit aici.

Vrei sa inveti sa programezi cu Java sau sa iti imbunatatesti abilitatile de programare in Java? Parcurge cursurile noastre.

Originally published at https://www.luxoft-training.ro.

--

--

No responses yet