reactivex mit rxjava - java forum stuttgartim kleinen strom von daten: liste Änderungen verfolgen:...
TRANSCRIPT
![Page 1: ReactiveX mit RxJava - Java Forum StuttgartIm Kleinen Strom von Daten: Liste Änderungen verfolgen: Events (Mouse-Clicks, ...) Im Großen Strom von Daten: Web-Sockets Änderungen verfolgen:](https://reader034.vdocuments.mx/reader034/viewer/2022042220/5ec67cf9ae6d2609843381c9/html5/thumbnails/1.jpg)
ReactiveX mit RxJava
Roman Roelofsen - w11k GmbH / theCodeCampusTwitter & GitHub: romanroe
1
![Page 2: ReactiveX mit RxJava - Java Forum StuttgartIm Kleinen Strom von Daten: Liste Änderungen verfolgen: Events (Mouse-Clicks, ...) Im Großen Strom von Daten: Web-Sockets Änderungen verfolgen:](https://reader034.vdocuments.mx/reader034/viewer/2022042220/5ec67cf9ae6d2609843381c9/html5/thumbnails/2.jpg)
Über mich
Alpha Geek, Entwickler, Trainerw11k GmbH - The Web Engineers
IndividualsoftwaretheCodeCampus
Schulungsanbieter Angular &TypeScript
1
![Page 3: ReactiveX mit RxJava - Java Forum StuttgartIm Kleinen Strom von Daten: Liste Änderungen verfolgen: Events (Mouse-Clicks, ...) Im Großen Strom von Daten: Web-Sockets Änderungen verfolgen:](https://reader034.vdocuments.mx/reader034/viewer/2022042220/5ec67cf9ae6d2609843381c9/html5/thumbnails/3.jpg)
Reaktive Programmierung
1
![Page 4: ReactiveX mit RxJava - Java Forum StuttgartIm Kleinen Strom von Daten: Liste Änderungen verfolgen: Events (Mouse-Clicks, ...) Im Großen Strom von Daten: Web-Sockets Änderungen verfolgen:](https://reader034.vdocuments.mx/reader034/viewer/2022042220/5ec67cf9ae6d2609843381c9/html5/thumbnails/4.jpg)
... a programming paradigm orientedaround data flows and the propagationof change."
1
![Page 5: ReactiveX mit RxJava - Java Forum StuttgartIm Kleinen Strom von Daten: Liste Änderungen verfolgen: Events (Mouse-Clicks, ...) Im Großen Strom von Daten: Web-Sockets Änderungen verfolgen:](https://reader034.vdocuments.mx/reader034/viewer/2022042220/5ec67cf9ae6d2609843381c9/html5/thumbnails/5.jpg)
Im Kleinen
Strom von Daten: ListeÄnderungen verfolgen: Events (Mouse-Clicks, ...)
Im Großen
Strom von Daten: Web-SocketsÄnderungen verfolgen: Message Bus
1
![Page 6: ReactiveX mit RxJava - Java Forum StuttgartIm Kleinen Strom von Daten: Liste Änderungen verfolgen: Events (Mouse-Clicks, ...) Im Großen Strom von Daten: Web-Sockets Änderungen verfolgen:](https://reader034.vdocuments.mx/reader034/viewer/2022042220/5ec67cf9ae6d2609843381c9/html5/thumbnails/6.jpg)
Iterator
java.util.IteratorSynchron, PullKeine Fehler-Konzept
Callback
java.util.function.Funtion<T, R>Asynchron, PushKein standardisiertes Fehler -Konzept
1
![Page 7: ReactiveX mit RxJava - Java Forum StuttgartIm Kleinen Strom von Daten: Liste Änderungen verfolgen: Events (Mouse-Clicks, ...) Im Großen Strom von Daten: Web-Sockets Änderungen verfolgen:](https://reader034.vdocuments.mx/reader034/viewer/2022042220/5ec67cf9ae6d2609843381c9/html5/thumbnails/7.jpg)
Reactive Programming = Iterator + Callback
(+ Fehlerbehandlung)
1
![Page 8: ReactiveX mit RxJava - Java Forum StuttgartIm Kleinen Strom von Daten: Liste Änderungen verfolgen: Events (Mouse-Clicks, ...) Im Großen Strom von Daten: Web-Sockets Änderungen verfolgen:](https://reader034.vdocuments.mx/reader034/viewer/2022042220/5ec67cf9ae6d2609843381c9/html5/thumbnails/8.jpg)
ReactiveX
RxJava
Implementierungen fürJava, JavaScript/TypeScript, .NET, Scala, Clojure,Swift, etc.
http://reactivex.io
1
![Page 9: ReactiveX mit RxJava - Java Forum StuttgartIm Kleinen Strom von Daten: Liste Änderungen verfolgen: Events (Mouse-Clicks, ...) Im Großen Strom von Daten: Web-Sockets Änderungen verfolgen:](https://reader034.vdocuments.mx/reader034/viewer/2022042220/5ec67cf9ae6d2609843381c9/html5/thumbnails/9.jpg)
API
ObservableLiefert Daten
ObserverBekommt Daten
subscribe am Observable -> Disposable
1
![Page 10: ReactiveX mit RxJava - Java Forum StuttgartIm Kleinen Strom von Daten: Liste Änderungen verfolgen: Events (Mouse-Clicks, ...) Im Großen Strom von Daten: Web-Sockets Änderungen verfolgen:](https://reader034.vdocuments.mx/reader034/viewer/2022042220/5ec67cf9ae6d2609843381c9/html5/thumbnails/10.jpg)
Operatoren
Methoden am Observablemap/filter/...
Kombination von ObservablesflatMap/withLatestFrom/...
Operatoren erzeugen immer neue Observables
1
![Page 11: ReactiveX mit RxJava - Java Forum StuttgartIm Kleinen Strom von Daten: Liste Änderungen verfolgen: Events (Mouse-Clicks, ...) Im Großen Strom von Daten: Web-Sockets Änderungen verfolgen:](https://reader034.vdocuments.mx/reader034/viewer/2022042220/5ec67cf9ae6d2609843381c9/html5/thumbnails/11.jpg)
Demo - Operatoren
1
![Page 12: ReactiveX mit RxJava - Java Forum StuttgartIm Kleinen Strom von Daten: Liste Änderungen verfolgen: Events (Mouse-Clicks, ...) Im Großen Strom von Daten: Web-Sockets Änderungen verfolgen:](https://reader034.vdocuments.mx/reader034/viewer/2022042220/5ec67cf9ae6d2609843381c9/html5/thumbnails/12.jpg)
API - cold/synchronObservable<Integer> observable = Observable.create(e -> { e.onNext(1); e.onNext(2); e.onComplete(); });
observable.subscribe(new Observer<Integer>() { public void onSubscribe(Disposable d) { } public void onNext(Integer i) { } public void onError(Throwable e) { } public void onComplete() { } });
1
![Page 13: ReactiveX mit RxJava - Java Forum StuttgartIm Kleinen Strom von Daten: Liste Änderungen verfolgen: Events (Mouse-Clicks, ...) Im Großen Strom von Daten: Web-Sockets Änderungen verfolgen:](https://reader034.vdocuments.mx/reader034/viewer/2022042220/5ec67cf9ae6d2609843381c9/html5/thumbnails/13.jpg)
Fehlerbehandung
Observer
Stream termininert bei einem Fehler!
Observable<Integer> observable = Observable.create(e -> { e.onNext(1); e.onNext(2); e.onError(new RuntimeException("error")); e.onNext(3); // wird nicht "gesendet" });
1
![Page 14: ReactiveX mit RxJava - Java Forum StuttgartIm Kleinen Strom von Daten: Liste Änderungen verfolgen: Events (Mouse-Clicks, ...) Im Großen Strom von Daten: Web-Sockets Änderungen verfolgen:](https://reader034.vdocuments.mx/reader034/viewer/2022042220/5ec67cf9ae6d2609843381c9/html5/thumbnails/14.jpg)
Use Cases
Http Client - RxNettyHttpClient.newClient(serverAddress) .enableWireLogging("hello-client", LogLevel.ERROR) .createGet("/hello") .doOnNext(resp -> logger.info(resp.toString())) .flatMap(resp -> resp.getContent() .map(bb -> bb.toString(Charset.defaultCharset())))
1
![Page 15: ReactiveX mit RxJava - Java Forum StuttgartIm Kleinen Strom von Daten: Liste Änderungen verfolgen: Events (Mouse-Clicks, ...) Im Großen Strom von Daten: Web-Sockets Änderungen verfolgen:](https://reader034.vdocuments.mx/reader034/viewer/2022042220/5ec67cf9ae6d2609843381c9/html5/thumbnails/15.jpg)
Http Client - Netflix Ribbon
1
![Page 16: ReactiveX mit RxJava - Java Forum StuttgartIm Kleinen Strom von Daten: Liste Änderungen verfolgen: Events (Mouse-Clicks, ...) Im Großen Strom von Daten: Web-Sockets Änderungen verfolgen:](https://reader034.vdocuments.mx/reader034/viewer/2022042220/5ec67cf9ae6d2609843381c9/html5/thumbnails/16.jpg)
User Interface
1
![Page 17: ReactiveX mit RxJava - Java Forum StuttgartIm Kleinen Strom von Daten: Liste Änderungen verfolgen: Events (Mouse-Clicks, ...) Im Großen Strom von Daten: Web-Sockets Änderungen verfolgen:](https://reader034.vdocuments.mx/reader034/viewer/2022042220/5ec67cf9ae6d2609843381c9/html5/thumbnails/17.jpg)
Subject
1
![Page 18: ReactiveX mit RxJava - Java Forum StuttgartIm Kleinen Strom von Daten: Liste Änderungen verfolgen: Events (Mouse-Clicks, ...) Im Großen Strom von Daten: Web-Sockets Änderungen verfolgen:](https://reader034.vdocuments.mx/reader034/viewer/2022042220/5ec67cf9ae6d2609843381c9/html5/thumbnails/18.jpg)
Observable und ObserverMultiplexerPuffer
1
![Page 19: ReactiveX mit RxJava - Java Forum StuttgartIm Kleinen Strom von Daten: Liste Änderungen verfolgen: Events (Mouse-Clicks, ...) Im Großen Strom von Daten: Web-Sockets Änderungen verfolgen:](https://reader034.vdocuments.mx/reader034/viewer/2022042220/5ec67cf9ae6d2609843381c9/html5/thumbnails/19.jpg)
Nützlich, wenn Datenquelle nicht verschachtelt werdenkann
z.B. Servlet -> Subject -> Observer
Observable.create(e -> { ... ... });
public class Servlet extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse res) { subject.onNext(Pair.of(req, res)); } }
1
![Page 20: ReactiveX mit RxJava - Java Forum StuttgartIm Kleinen Strom von Daten: Liste Änderungen verfolgen: Events (Mouse-Clicks, ...) Im Großen Strom von Daten: Web-Sockets Änderungen verfolgen:](https://reader034.vdocuments.mx/reader034/viewer/2022042220/5ec67cf9ae6d2609843381c9/html5/thumbnails/20.jpg)
PublishSubject
Ausgabe
Subject<Integer> sub1 = PublishSubject.create(); sub1.onNext(1); sub1.onNext(2); sub1.subscribe(System.out::println); sub1.onNext(3);
3
1
![Page 21: ReactiveX mit RxJava - Java Forum StuttgartIm Kleinen Strom von Daten: Liste Änderungen verfolgen: Events (Mouse-Clicks, ...) Im Großen Strom von Daten: Web-Sockets Änderungen verfolgen:](https://reader034.vdocuments.mx/reader034/viewer/2022042220/5ec67cf9ae6d2609843381c9/html5/thumbnails/21.jpg)
ReplaySubject
Ausgabe
Subject<Integer> sub1 = ReplaySubject.createWithSize(3); sub1.onNext(1); sub1.onNext(2); sub1.onNext(3); sub1.onNext(4); sub1.onNext(5); sub1.subscribe(System.out::println); sub1.onNext(6);
3 4 5 6
1
![Page 22: ReactiveX mit RxJava - Java Forum StuttgartIm Kleinen Strom von Daten: Liste Änderungen verfolgen: Events (Mouse-Clicks, ...) Im Großen Strom von Daten: Web-Sockets Änderungen verfolgen:](https://reader034.vdocuments.mx/reader034/viewer/2022042220/5ec67cf9ae6d2609843381c9/html5/thumbnails/22.jpg)
ReplaySubject
Ausgabe
Subject<Integer> sub1 = BehaviorSubject.createDefault(99); sub1.subscribe(System.out::println); sub1.onNext(1); sub1.onNext(2); sub1.onNext(3);
99 1 2 3
1
![Page 23: ReactiveX mit RxJava - Java Forum StuttgartIm Kleinen Strom von Daten: Liste Änderungen verfolgen: Events (Mouse-Clicks, ...) Im Großen Strom von Daten: Web-Sockets Änderungen verfolgen:](https://reader034.vdocuments.mx/reader034/viewer/2022042220/5ec67cf9ae6d2609843381c9/html5/thumbnails/23.jpg)
Marble Diagramme
1
![Page 24: ReactiveX mit RxJava - Java Forum StuttgartIm Kleinen Strom von Daten: Liste Änderungen verfolgen: Events (Mouse-Clicks, ...) Im Großen Strom von Daten: Web-Sockets Änderungen verfolgen:](https://reader034.vdocuments.mx/reader034/viewer/2022042220/5ec67cf9ae6d2609843381c9/html5/thumbnails/24.jpg)
zip
1
![Page 25: ReactiveX mit RxJava - Java Forum StuttgartIm Kleinen Strom von Daten: Liste Änderungen verfolgen: Events (Mouse-Clicks, ...) Im Großen Strom von Daten: Web-Sockets Änderungen verfolgen:](https://reader034.vdocuments.mx/reader034/viewer/2022042220/5ec67cf9ae6d2609843381c9/html5/thumbnails/25.jpg)
map
1
![Page 26: ReactiveX mit RxJava - Java Forum StuttgartIm Kleinen Strom von Daten: Liste Änderungen verfolgen: Events (Mouse-Clicks, ...) Im Großen Strom von Daten: Web-Sockets Änderungen verfolgen:](https://reader034.vdocuments.mx/reader034/viewer/2022042220/5ec67cf9ae6d2609843381c9/html5/thumbnails/26.jpg)
flatMap
1
![Page 27: ReactiveX mit RxJava - Java Forum StuttgartIm Kleinen Strom von Daten: Liste Änderungen verfolgen: Events (Mouse-Clicks, ...) Im Großen Strom von Daten: Web-Sockets Änderungen verfolgen:](https://reader034.vdocuments.mx/reader034/viewer/2022042220/5ec67cf9ae6d2609843381c9/html5/thumbnails/27.jpg)
Schedulers
1
![Page 28: ReactiveX mit RxJava - Java Forum StuttgartIm Kleinen Strom von Daten: Liste Änderungen verfolgen: Events (Mouse-Clicks, ...) Im Großen Strom von Daten: Web-Sockets Änderungen verfolgen:](https://reader034.vdocuments.mx/reader034/viewer/2022042220/5ec67cf9ae6d2609843381c9/html5/thumbnails/28.jpg)
Observable Streams sind nicht grundsätzlich asynchron!Schedulers verlagern den Observer und die Operatorenin Threads
obs$.observeOn(Schedulers.io()).map(i -> ioBound(i)); obs$.observeOn(Schedulers.computation()).map(i -> heavyOnCpu(i));
1
![Page 29: ReactiveX mit RxJava - Java Forum StuttgartIm Kleinen Strom von Daten: Liste Änderungen verfolgen: Events (Mouse-Clicks, ...) Im Großen Strom von Daten: Web-Sockets Änderungen verfolgen:](https://reader034.vdocuments.mx/reader034/viewer/2022042220/5ec67cf9ae6d2609843381c9/html5/thumbnails/29.jpg)
Java 9 Flow APIab Java 9Reactive Programming basierend aufhttp://www.reactive-streams.org/Observable -> Flowable*Subject -> *Processor
1
![Page 30: ReactiveX mit RxJava - Java Forum StuttgartIm Kleinen Strom von Daten: Liste Änderungen verfolgen: Events (Mouse-Clicks, ...) Im Großen Strom von Daten: Web-Sockets Änderungen verfolgen:](https://reader034.vdocuments.mx/reader034/viewer/2022042220/5ec67cf9ae6d2609843381c9/html5/thumbnails/30.jpg)
DiversesRatpack - https://ratpack.io/Akka - http://akka.io/RxJS
1
![Page 31: ReactiveX mit RxJava - Java Forum StuttgartIm Kleinen Strom von Daten: Liste Änderungen verfolgen: Events (Mouse-Clicks, ...) Im Großen Strom von Daten: Web-Sockets Änderungen verfolgen:](https://reader034.vdocuments.mx/reader034/viewer/2022042220/5ec67cf9ae6d2609843381c9/html5/thumbnails/31.jpg)
Fazit
Lernkurve:kurz flachdann lange steildann wieder flach
ReactiveX macht komplexe Datenflüsse "einfach"Keine komplexe Datenflüsse? Dann Finger weg...Kein echtes Projekt zum Lernen nehmen!http://rxmarbles.com
1
![Page 32: ReactiveX mit RxJava - Java Forum StuttgartIm Kleinen Strom von Daten: Liste Änderungen verfolgen: Events (Mouse-Clicks, ...) Im Großen Strom von Daten: Web-Sockets Änderungen verfolgen:](https://reader034.vdocuments.mx/reader034/viewer/2022042220/5ec67cf9ae6d2609843381c9/html5/thumbnails/32.jpg)
Roman Roelofsen - w11k GmbH
@romanroe
1