Programarea reactiva Java. Reactive Streams spec

Inca un articol din seria noastra despre programarea reactiva in Java. De acesta data abordam reactive streams spec.

Dec 16, 2021 468

Reactive Streams spec

Reactive streams au fost incluse in Java 9 ca specificatii. In timp ce tehnologiile anterioare (Completable Future, Fork/Join framework) erau implementate in JDK, reactive streams nu au implementare. Exista doar o precizare scurta. Avem doar 4 interfete:

twitter reactive programming.png


Daca ne uitam la exemplul de mai sus, putem spune ca:

Publisher este persoana care trimite tweet-ul;

Subscriber este abonatul. Subscriber determina ce facem daca:
  • Incepem sa ascultam un stream (onSubscribe). In momentul in care ne-am abonat cu succes, aceasta functie va fi apelata
  • O alta valoare a aparut in stream (onNext)
  • A avut loc o eroare (onError)
  • Stream-ul este finalizat (onComplete)

Subscription — avem o abonare pe care o putem anula (cancel) sau putem cere un anumit numar de valori (request(long n)). Putem sa definim commportamentul pentru fiecare valoare urmatoare sau poate lua valori manual.

Processor este atat Subscriber cat si Publisher. Primeste niste valori si le pune undeva.

Daca vrem sa ne abonam la ceva, apelam Subscribe si apoi primim actualizari oricand. Putem sa le cerem manual folosind aceasta comanda. Sau putem defini comportamentul atunci cand apare un mesaj nou (onNext): ce facem daca apare un nou mesaj, ce facem daca apare o eroare si ce facem daca Publisher a finalizat stream-ul. Putem sa definim aceste callbacks sau le putem anula.


Modele PUSH / PULL

Exista doua modele de stream:

Push — cand avem “pushing” al valorilor

Spre exemplu, suntem abonati la cineva pe Telegram sau Instagram si primim notificari (care se numesc “push notifications”, nu le cerem noi, vin automat). Acestea ar putea sa fie, spre exemplu, mesaje pop-up. Putem sa definim cum sa reactionm la fiecare mesaj.

Pull — cand noi facem cererea

Spre exemplu, nu vrem sa ne abonam, deoarece sunt prea multe informatii, dar vrem sa vizitam site-ul si sa citim stirile.

Pentru modelul Push, definim callbacks, i.e., functii care vor fi apelate cand urmatorul mesaj apare, si pentru modelul Pull, putem sa folosim request method cand vrem sa aflam ceva nou.

Modelul Pull este esential pentru Backpressure. Ce este asta?

Ai putea sa fi spamat de abonarile tale. In acest caz, nu le poti citi pe toate, si sunt sanse sa pierzi informatii critice — pur si simplu se pierd in fluxul de mesaje. Cand, datorita unui flux de informatii considerabil, Subcriber nu poate sa se ocupe de tot ce este publicat de Publisher, avem Backpressure.

In acest caz, folosim modelul Pull si facem o cerere pentru un mesaj, din fluxurile de date care sunt importante pentru noi.

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.

Daca iti place acest articol, distribuie-l si prietenilor tai!




Mai ai intrebari?
Contacteaza-ne.
Thank you.
Your request has been received.