Upload
tomasz-kowalczewski
View
4.130
Download
0
Embed Size (px)
DESCRIPTION
Introduction to Reactive Java library created by Netflix
Citation preview
REACTIVE JAVA
REACTIVE
“readily responsive to a stimulus”
Merriam-Webster dictionary
RX JAVA BY NETFLIX
• A library for composing asynchronous and event-based programs using observable sequences for the Java VM
• Implementation of Rx Observables from Microsoft
• Targets the JVM not a language. Currently supports Java, Groovy, Clojure, and Scala
• https://github.com/Netflix/RxJava
• Apache License, Version 2.0
OBSERVABLE ->
OBSERVER ->
SUBCRIPTIONS AND EVENTS
t
subscribe
onNext*
onCompleted | onError
SERVICE RETURNING OBSERVABLE
public interface ShrödingersCat {
Observable<Boolean> alive();
}
cat
.alive()
.subscribe(status -> System.out.println(status));
SERVICE RETURNING OBSERVABLE
public interface ShrödingersCat {
Observable<Boolean> alive();
}
cat
.alive()
.throttleWithTimeout(250, TimeUnit.MILLISECONDS)
.distinctUntilChanged()
.filter(isAlive -> isAlive)
.map(Boolean::toString)
.subscribe(status -> display.display(status));
OBSERVER
public interface Observer<T> {
void onCompleted();
void onError(Throwable e);
void onNext(T args);
}
SUBSCRIPTION
public interface Subscription {
void unsubscribe();
}
CREATING OBSERVABLES
Observable<Boolean> watchTheCat =
Observable.create(observer -> {
observer.onNext(cat.isAlive());
observer.onCompleted();
return Subscriptions.empty();
});
• Executes all code when subscribed
• Not asynchronous, not really a stream
CREATING OBSERVABLES
Observable.create(observer -> {
Future<?> future = executorService.submit(() -> {
observer.onNext(cat.isAlive());
observer.onCompleted();
});
return Subscriptions.from(future);
});
• Executes code in separate thread (from thread pool executorService)
• Stream of events is delivered by the executor thread
• Thread calling onNext() runs all the operations defined on observable
• Future is cancelled if client unsubscribes
MARBLE DIAGRAM
MERGE(OBSERVABLE...)
CONCAT(OBSERVABLE...)
DEBOUNCE(LONG TIEMOUT, TIMEUNIT TU)
ZIP(OBSERVABLE, OBSERVABLE, FUNC2)
HOW WE USE IT – DATA FILE DISCOVERYAmazon S3 Disk Memory
cache cache cache
mergeDelayError