Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Java goes reactive

Java goes reactive

Reactive Streams in Java 9 with RxJava2

Krzysztof Pawlowski

June 13, 2017
Tweet

More Decks by Krzysztof Pawlowski

Other Decks in Programming

Transcript

  1. > < JAVA GOES REACTIVE REACTIVE STREAMS IN JAVA 9

    WITH RXJAVA2 1 KRZYSZTOF PAWŁOWSKI | @KRZYCHPAWLOWSKI 13.06.2017
  2. > < KRZYSZTOF PAWŁOWSKI | @KRZYCHPAWLOWSKI Reactive Systems 
 vs

    Reactive Programming 3 Reactive systems • set of design rules • interaction between
 services • fulfilling Reactive
 Manifesto Reactive programming • asynchronous • non-blocking execution • event-driven
  3. > < KRZYSZTOF PAWŁOWSKI | @KRZYCHPAWLOWSKI Why Reactive Programming? 4

    source: https://www.lightbend.com/reactive-programming-versus-reactive-systems
  4. > < KRZYSZTOF PAWŁOWSKI | @KRZYCHPAWLOWSKI RxNetty performance 5 source:

    Reactive Programming with RxJava by Ben Christensen, Tomasz Nurkiewicz
  5. > < KRZYSZTOF PAWŁOWSKI | @KRZYCHPAWLOWSKI RxNetty performance 6 source:

    Reactive Programming with RxJava by Ben Christensen, Tomasz Nurkiewicz
  6. > < KRZYSZTOF PAWŁOWSKI | @KRZYCHPAWLOWSKI Reactive Streams 7 “Reactive

    Streams is an initiative to provide a standard for asynchronous stream processing with non-blocking 
 back-pressure.” reactive-streams.org
  7. > < KRZYSZTOF PAWŁOWSKI | @KRZYCHPAWLOWSKI What is a stream?

    8 • series of items emitted over time
 • possibly no beginning, no end
 • used for transforming data
  8. > < KRZYSZTOF PAWŁOWSKI | @KRZYCHPAWLOWSKI Streams - what for?

    9 • processing large data sets
 • real time data
 • monitoring and analytics
  9. > < KRZYSZTOF PAWŁOWSKI | @KRZYCHPAWLOWSKI Back-pressure 11 Publisher Subscriber

    fast
 100 ops / s slow
 1 ops / s PUSH model Publisher passes item to Subscriber
  10. > < KRZYSZTOF PAWŁOWSKI | @KRZYCHPAWLOWSKI Back-pressure 12 Publisher Subscriber

    fast
 100 ops / s slow
 1 ops / s PUSH model Buffer Overflow
 Out Of Memory Publisher passes item to Subscriber
  11. > < KRZYSZTOF PAWŁOWSKI | @KRZYCHPAWLOWSKI Back-pressure 13 Publisher Subscriber

    slow
 1 ops / s fast
 100 ops / s PUSH model Publisher passes item to Subscriber
  12. > < KRZYSZTOF PAWŁOWSKI | @KRZYCHPAWLOWSKI Back-pressure 14 Publisher Subscriber

    slow
 1 ops / s fast
 100 ops / s PUSH model ✓OK Publisher passes item to Subscriber
  13. > < KRZYSZTOF PAWŁOWSKI | @KRZYCHPAWLOWSKI Back-pressure 15 Publisher Subscriber

    fast
 100 ops / s slow
 1 ops / s PULL model Subscriber gets items from Publisher 
 in blocking call
  14. > < KRZYSZTOF PAWŁOWSKI | @KRZYCHPAWLOWSKI Back-pressure 16 Publisher Subscriber

    fast
 100 ops / s slow
 1 ops / s PULL model ✓OK Subscriber gets items from Publisher 
 in blocking call
  15. > < KRZYSZTOF PAWŁOWSKI | @KRZYCHPAWLOWSKI Back-pressure 17 Publisher Subscriber

    slow
 1 ops / s fast
 100 ops / s PULL model Subscriber gets items from Publisher 
 in blocking call
  16. > < KRZYSZTOF PAWŁOWSKI | @KRZYCHPAWLOWSKI Back-pressure 18 Publisher Subscriber

    slow
 1 ops / s fast
 100 ops / s PULL model ✗ slow Subscriber gets items from Publisher 
 in blocking call
  17. > < KRZYSZTOF PAWŁOWSKI | @KRZYCHPAWLOWSKI Dynamic pull/push 20 Publisher

    Subscriber request (n) data (up to n) fast subscriber => request(Long.MaxValue) => PUSH model
  18. > < KRZYSZTOF PAWŁOWSKI | @KRZYCHPAWLOWSKI Reactive Streams SPI 21

    public interface Publisher<T> { public void subscribe(Subscriber<? super T> s); } public interface Subscription { public void request(long n); public void cancel(); } public interface Subscriber<T> { public void onSubscribe(Subscription s); public void onNext(T t); public void onError(Throwable t); public void onComplete(); } 
 public interface Processor<T, R> extends Subscriber<T>, Publisher<R> { }
  19. > < KRZYSZTOF PAWŁOWSKI | @KRZYCHPAWLOWSKI Reactive Streams Implementations 22

    • Akka Streams • Project Reactor • RxJava / RxJava2 • MongoDB • Reactive Rabbit • Vert.x
  20. > < KRZYSZTOF PAWŁOWSKI | @KRZYCHPAWLOWSKI 23 But we were

    supposed to talk 
 about Java 9, right?
  21. > < KRZYSZTOF PAWŁOWSKI | @KRZYCHPAWLOWSKI Reactive Streams and JDK9

    24 package org.reactivestreams; class java.util.concurrent.Flow; • JEP 266 • Java Flow API
  22. > < KRZYSZTOF PAWŁOWSKI | @KRZYCHPAWLOWSKI RxJava 2 25 “RxJava

    – Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM.” https://github.com/ReactiveX/RxJava
  23. > < KRZYSZTOF PAWŁOWSKI | @KRZYCHPAWLOWSKI RxJava 2 26 •

    nice API (Java 8 Streams like)
 • transformations on streams
 • observer pattern on steroids
 • implements Reactive Streams SPI
  24. > < KRZYSZTOF PAWŁOWSKI | @KRZYCHPAWLOWSKI RxJava 2 operators 32

    … and many, many more at http://rxmarbles.com
  25. > < KRZYSZTOF PAWŁOWSKI | @KRZYCHPAWLOWSKI RxJava 2 example 33

    Source code available at: https://github.com/krzysztof-pawlowski/TJUG-RxJava2