Download - BackDay Xebia : Découvrez RxJava, le reactive programming

Transcript
Page 1: BackDay Xebia : Découvrez RxJava, le reactive programming

Jérome Doucet | Romain Niveau

RxJava

Découvrez RxJava, le reactive programming

Page 2: BackDay Xebia : Découvrez RxJava, le reactive programming

Pourquoi Rx ?

Page 3: BackDay Xebia : Découvrez RxJava, le reactive programming

OriginePourquoi Rx

• Reactive programming

• Rx: Reactive Extensions

• Initialement en .NET

• Polyglote

• Extension du pattern Observer

3

Page 4: BackDay Xebia : Découvrez RxJava, le reactive programming

DocumentationsPourquoi Rx

• Documentations très riches

• Basées sur des diagrammes à billes

• Arbre de décision pour trouver les bons opérateurs

4

Page 5: BackDay Xebia : Découvrez RxJava, le reactive programming

DocumentationsPourquoi Rx

5

Page 6: BackDay Xebia : Découvrez RxJava, le reactive programming

Pattern Observer

Page 7: BackDay Xebia : Découvrez RxJava, le reactive programming

Pattern initialPattern Observer

7

Page 8: BackDay Xebia : Découvrez RxJava, le reactive programming

Dans RxJavaPattern Observer

• Basé sur ce pattern

• Ajout d’opérateurs divers (agrégation, inspections de séquences, …)

• Ecriture fonctionnelle

8

Page 9: BackDay Xebia : Découvrez RxJava, le reactive programming

Classes principalesPattern Observer

• Observable

• Observer

• Subscription

• Scheduler

9

Page 10: BackDay Xebia : Découvrez RxJava, le reactive programming

3 méthodes principalesPattern Observer

• OnNext• Appelée après chaque évènement

• OnError• Appelée lorsqu’une erreur survient

• OnCompleted• Appelée à la fin de la séquence

10

Page 11: BackDay Xebia : Découvrez RxJava, le reactive programming

Exemple d’Observer: classe complètePattern Observer

11

Page 12: BackDay Xebia : Découvrez RxJava, le reactive programming

Exemple d’Observer: actions rapidesPattern Observer

12

Page 13: BackDay Xebia : Découvrez RxJava, le reactive programming

ConnectableObservablePattern Observer

• Cold Observable

• Hot Observable

• Non synchronisé par défaut

• Connect() synchronise les Observers

13

Page 14: BackDay Xebia : Découvrez RxJava, le reactive programming

Séquences

Page 15: BackDay Xebia : Découvrez RxJava, le reactive programming

CréationsSéquences

• Les séquences sont au coeur de RxJava

• Elles sont toujours créées à l’aide de méthodes statiques

• Quelques exemples…

15

Page 16: BackDay Xebia : Découvrez RxJava, le reactive programming

CréationsSéquences

from()

16

Page 17: BackDay Xebia : Découvrez RxJava, le reactive programming

CréationsSéquences

from()

17

Page 18: BackDay Xebia : Découvrez RxJava, le reactive programming

CréationsSéquences

create()

18

Page 19: BackDay Xebia : Découvrez RxJava, le reactive programming

CréationsSéquences

• Et il en existe pleins d’autres :• just(), repeat(), repeatWhen(), defer(), range(), interval(),

timer(), empty(), error(), never().

• Une extension (rxjava-async) permet de créer des Observables à partir de fonctions.

19

Page 20: BackDay Xebia : Découvrez RxJava, le reactive programming

Inspection de séquences

Page 21: BackDay Xebia : Découvrez RxJava, le reactive programming

InspectionSéquences

• Les séquences peuvent être inspectées.

• Les méthodes suivantes peuvent être utilisées :• all(), contains(), exists(), isEmpty(), sequenceEquals()

21

Page 22: BackDay Xebia : Découvrez RxJava, le reactive programming

Agrégation de séquences

Page 23: BackDay Xebia : Découvrez RxJava, le reactive programming

AgrégationSéquences

• RxJava propose des opérateurs d’agrégation courants

• Ils vont permettre de présenter la donnée sous une forme qui va faciliter son exploitation

• Ils sont en partie inspirés d’opérateurs fonctionnels.

• Quelques exemples…

23

Page 24: BackDay Xebia : Découvrez RxJava, le reactive programming

AgrégationSéquences

reduce()

24

Page 25: BackDay Xebia : Découvrez RxJava, le reactive programming

AgrégationSéquences

collect()

25

Page 26: BackDay Xebia : Découvrez RxJava, le reactive programming

AgrégationSéquences

• L’opérateur reduce est aussi présent, ainsi que d’autres permettant de convertir la séquence en Collections (toList(), toMap(), toSortedList(), …)

• Une extension (rxjava-math) permet de faire des agrégations sur des nombres

• Deux autres opérateurs permettent de faire des agrégations sur des String uniquement, join() et stringConcat()

26

Page 27: BackDay Xebia : Découvrez RxJava, le reactive programming

Backpressure / Gestion d’erreurs

Page 28: BackDay Xebia : Découvrez RxJava, le reactive programming

Méthodes filtrantesBackpressure

• throttleFirst

• throttleLast

• debounce

28

Page 29: BackDay Xebia : Découvrez RxJava, le reactive programming

Concepts alternatifs: bufferBackpressure

29

Page 30: BackDay Xebia : Découvrez RxJava, le reactive programming

Concepts alternatifs: windowBackpressure

30

Page 31: BackDay Xebia : Découvrez RxJava, le reactive programming

Principes de baseGestion d’erreurs

• Aucune exception levée hors de l’Observable par défaut

• Si onError lève une exception, celle ci remonte dans une OnErrorFailedException

• OnErrorNotImplementedException est levée si l’Observer n’a pas de onError

• CompositeException encapsule l’ensemble des exceptions

31

Page 32: BackDay Xebia : Découvrez RxJava, le reactive programming

Principes avancésGestion d’erreurs

• OnErrorResumeNext

• OnErrorReturn

• Retry

32

Page 33: BackDay Xebia : Découvrez RxJava, le reactive programming

Principes avancésGestion d’erreurs

• OnErrorResumeNext

• OnErrorReturn

• Retry

33

Page 34: BackDay Xebia : Découvrez RxJava, le reactive programming

Principes avancésGestion d’erreurs

• OnErrorResumeNext

• OnErrorReturn

• Retry

34

Page 35: BackDay Xebia : Découvrez RxJava, le reactive programming

Combinaison de séquences

Page 36: BackDay Xebia : Découvrez RxJava, le reactive programming

Combinaison de séquences

• Répond aux besoins de fusion entre plusieurs sources de données.

• Permet d’arbitrer des sources de données concurrentes.

• Permet de corréler les événements issus de plusieurs sources de données.

36

Page 37: BackDay Xebia : Découvrez RxJava, le reactive programming

FusionCombinaison de séquences

concat()

37

Page 38: BackDay Xebia : Découvrez RxJava, le reactive programming

FusionCombinaison de séquences

startWith()

38

Page 39: BackDay Xebia : Découvrez RxJava, le reactive programming

ConcurrenceCombinaison de séquences

amb()

39

Page 40: BackDay Xebia : Découvrez RxJava, le reactive programming

ConcurrenceCombinaison de séquences

merge()

40

Page 41: BackDay Xebia : Découvrez RxJava, le reactive programming

CorrélationCombinaison de séquences

zip()

41

Page 42: BackDay Xebia : Découvrez RxJava, le reactive programming

Concurrency

Page 43: BackDay Xebia : Découvrez RxJava, le reactive programming

SchedulerConcurrency

• Basée sur des Schedulers fourni par RxJava :• computation()• from(Executor)• immediate()• io()• newTread()• trampoline()

• Peuvent être utilisés directement

• Mais il existe des raccourcis

43

Page 44: BackDay Xebia : Découvrez RxJava, le reactive programming

Concurrency

subscribeOn() - observeOn()

44

Page 45: BackDay Xebia : Découvrez RxJava, le reactive programming

Démo

Page 46: BackDay Xebia : Découvrez RxJava, le reactive programming

Conclusion

Page 47: BackDay Xebia : Découvrez RxJava, le reactive programming

Conclusion

• Framework uniquement pour la gestion d’évènements

• Ne sert pas à faire des appels asynchrones

• Framework complexe qui demande du temps de prise en main

• Utilisé dans des outils open source: Hystrix, rx-vertx

47