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

RxJava - Getting Started

David
September 09, 2014

RxJava - Getting Started

Les applications sont de plus en plus interconnectées. Une architecture type WOA (Web Oriented Archiecture) et l’utilisation des micros-services nécessitent de faire de plus en plus d’appel à différents services web. Comment composer un résultat à partir de ces différents services, sans avoir à ce soucier de l’ordre dans lequel les serveurs vont répondre ?

RxJava offre une manière élégante de faire de l’asynchrone et de la composition au sein de son application. Nous vous exposerons les concepts de Rx (Reactive eXtension) avant de vous montrer une mise en application.

David Wursteisen - Brice Dutheil / Human Talks Paris / 9 septembre 2014

Video link of this presentation : https://parleys.com/play/5496fd23e4b0c9badd302bd7/chapter0/about

David

September 09, 2014
Tweet

More Decks by David

Other Decks in Programming

Transcript

  1. RxJava
    Getting Started
    Brice Dutheil / David Wursteisen

    View Slide

  2. Brice Dutheil
    @BriceDutheil
    Indep, Devoxx France,
    Hackergarten Paris
    Qui sommes nous ?
    David Wursteisen
    @dwursteisen

    View Slide

  3. Il était une fois...

    View Slide

  4. Il était une fois...

    View Slide

  5. Systèmes distribués

    View Slide

  6. Systèmes distribués

    View Slide

  7. Systèmes distribués

    View Slide

  8. Systèmes distribués

    View Slide

  9. Systèmes distribués
    The Internet

    View Slide

  10. Systèmes distribués

    View Slide

  11. Systèmes distribués

    View Slide

  12. RxJava

    View Slide

  13. Obervable

    View Slide

  14. Obervable

    View Slide

  15. Obervable

    View Slide

  16. Obervable

    View Slide

  17. Observable
    Observable.from(1, 2, 3, 4)

    View Slide

  18. Observable
    Observable.from(1, 2, 3, 4)
    Observable.from(asyncTask.getFuture())

    View Slide

  19. Observable
    Observable.from(1, 2, 3, 4)
    Observable.from(asyncTask.getFuture())
    Observable.range(1, 4400)

    View Slide

  20. Observable
    Observable.from(1, 2, 3, 4)
    Observable.from(asyncTask.getFuture())
    Observable.range(1, 4400)
    Observable.timer(0, 5, TimeUnit.SECONDS)

    View Slide

  21. Observable
    Observable.from(1, 2, 3, 4)
    Observable.from(asyncTask.getFuture())
    Observable.range(1, 4400)
    Observable.timer(0, 5, TimeUnit.SECONDS)
    Observable.create(...)

    View Slide

  22. Observable
    Observable.from(1, 2, 3, 4)
    Observable.from(asyncTask.getFuture())
    Observable.range(1, 4400)
    Observable.timer(0, 5, TimeUnit.SECONDS)
    Observable.create(...)
    Observable.from(anIterable)
    Observable.just(73)
    Observable.error(new Exception())
    Observable.empty()
    ...

    View Slide

  23. Observable
    Observable
    Observable
    Observable

    View Slide

  24. Subscriber
    Observable.range(1, 4400)

    View Slide

  25. Subscriber
    Observable.range(1, 4400)
    .subscribe(
    onNext
    )

    View Slide

  26. Subscriber
    Observable.range(1, 4400)
    .subscribe(
    System.out::println
    )

    View Slide

  27. Subscriber
    Observable.range(1, 4400)
    .subscribe(
    System.out::println,
    onError
    )

    View Slide

  28. Subscriber
    Observable.range(1, 4400)
    .subscribe(
    System.out::println,
    System.err::println
    )

    View Slide

  29. Subscriber
    Observable.range(1, 4400)
    .subscribe(
    System.out::println,
    System.err::println,
    onCompleted
    )

    View Slide

  30. Subscriber
    Observable.range(1, 4400)
    .subscribe(
    System.out::println,
    System.err::println,
    () -> System.out.println(“finished”)
    )

    View Slide

  31. Diagrammes Marble

    View Slide

  32. Diagrammes Marble

    View Slide

  33. Diagrammes Marble

    View Slide

  34. Diagrammes Marble

    View Slide

  35. Diagrammes Marble

    View Slide

  36. Diagrammes Marble

    View Slide

  37. Diagrammes Marble

    View Slide

  38. Diagrammes Marble

    View Slide

  39. Opérateurs
    Observable.from(1, 2, 3, 4)

    View Slide

  40. Opérateurs
    Observable.from(1, 2, 3, 4)
    .filter(predicate)

    View Slide

  41. Opérateurs
    Observable.from(1, 2, 3, 4)
    .filter((i) -> (i % 2) == 0)

    View Slide

  42. Opérateurs
    Observable.from(1, 2, 3, 4)
    .filter((i) -> (i % 2) == 0)
    .subscribe(System.out::println)

    View Slide

  43. Opérateurs
    Observable.from(1, 2, 3, 4)
    .filter((i) -> (i % 2) == 0)
    .subscribe(System.out::println)

    View Slide

  44. Opérateurs
    Observable.from(1, 2, 3, 4)
    .filter((i) -> (i % 2) == 0)
    .subscribe(System.out::println)
    2

    View Slide

  45. Opérateurs
    Observable.from(1, 2, 3, 4)
    .filter((i) -> (i % 2) == 0)
    .subscribe(System.out::println)
    2
    4

    View Slide

  46. Opérateurs
    Observable.from(1, 2, 3, 4)
    .take(2)
    .subscribe(System.out::println);

    View Slide

  47. Opérateurs
    Observable.from(1, 2, 3, 4)
    .take(2)
    .subscribe(System.out::println);
    1
    2

    View Slide

  48. Opérateurs
    Observable.from(1, 2, 3, 4)
    .map((i) -> i * 10)
    .subscribe(System.out::println);

    View Slide

  49. Opérateurs
    Observable.from(1, 2, 3, 4)
    .map((i) -> i * 10)
    .subscribe(System.out::println);
    10
    20
    30
    40

    View Slide

  50. Composition

    View Slide

  51. Composition

    View Slide

  52. Composition

    View Slide

  53. Composition
    couleurs
    formes

    View Slide

  54. Programmation synchrone
    observableReadingSynchronously(“strings.txt”)
    .take(10)
    .delay(1, SECONDS)
    .map(parse())
    .map(n -> “=> ” + n))
    .subscribe(to_the_view())

    View Slide

  55. Programmation synchrone
    main

    View Slide

  56. Programmation synchrone
    observableReadingSynchronously(“strings.txt”)
    .take(10)
    .delay(1, SECONDS)
    .map(parse())
    .map(n -> “=> ” + n))
    .subscribe(to_the_view())

    View Slide

  57. Programmation asynchrone
    Computation
    IO
    UI
    main
    source

    View Slide

  58. Programmation asynchrone
    Computation
    IO
    UI
    main
    source
    ...
    .subscribeOn(Schedulers.io())

    View Slide

  59. Programmation asynchrone
    Computation
    IO
    UI
    main
    source
    .take(...)
    .subscribeOn(Schedulers.io())

    View Slide

  60. Programmation asynchrone
    Computation
    IO
    UI
    main
    .delay(..., Schedulers.computation())

    View Slide

  61. Programmation asynchrone
    Computation
    IO
    UI
    main
    .delay(..., Schedulers.computation())
    .map(...)

    View Slide

  62. Programmation asynchrone
    Computation
    IO
    UI
    main
    .observeOn(Schedulers.from(...))
    .map(...)

    View Slide

  63. Programmation asynchrone
    Computation
    IO
    UI
    main
    .observeOn(Schedulers.from(...))
    .map(...)
    .subscribe(...)

    View Slide

  64. Programmation asynchrone
    observableReadingSynchronously(“strings.txt”)
    .subscribeOn(scheduler)
    .take(10)
    .delay(1, SECONDS, scheduler)
    .map(parse())
    .observeOn(scheduler)
    .map(n -> “=> ” + n))
    .subscribe(to_the_view())

    View Slide

  65. Programmation asynchrone
    observableReadingSynchronously(“strings.txt”)
    .subscribeOn(Schedulers.io())
    .take(10)
    .delay(1, SECONDS, Schedulers.computation())
    .map(parse())
    .observeOn(Schedulers.from(uiExecutor()))
    .map(n -> “=> ” + n))
    .subscribe(to_the_view())

    View Slide

  66. Aller plus loin
    Séquence
    finie & infinie
    Unsubscribe
    BackPressure
    Reactive Streams
    Hot & Cold
    observable

    View Slide

  67. Aller plus loin
    Séquence
    finie & infinie
    Unsubscribe
    BackPressure
    Reactive Streams
    Hot & Cold
    observable

    View Slide

  68. Aller plus loin
    Séquence
    finie & infinie
    Unsubscribe
    BackPressure
    Reactive Streams
    Hot & Cold
    observable

    View Slide

  69. Aller plus loin
    Séquence
    finie & infinie
    Unsubscribe
    BackPressure
    Reactive Streams
    Hot & Cold
    observable

    View Slide

  70. Aller plus loin
    Séquence
    finie & infinie
    Unsubscribe
    BackPressure
    Reactive Streams
    Hot & Cold
    observable

    View Slide

  71. Aller plus loin
    Séquence
    finie & infinie
    Unsubscribe
    BackPressure
    Reactive Streams
    Hot & Cold
    observable

    View Slide

  72. Questions ?

    View Slide