Slide 1

Slide 1 text

Spring WebFlux Melhorando a performance e legibilidade de aplicações Java @kamilah_santos

Slide 2

Slide 2 text

Kamila Santos Backend Developer @kamilah_santos

Slide 3

Slide 3 text

Comunidades

Slide 4

Slide 4 text

Manifesto Reativo @kamilah_santos

Slide 5

Slide 5 text

https://www.reactivemanifesto.org/pt-BR @kamilah_santos

Slide 6

Slide 6 text

Responsivo O sistema responde em tempo hábil, se possível @kamilah_santos

Slide 7

Slide 7 text

Resiliente O sistema permanece responsivo diante de falhas @kamilah_santos

Slide 8

Slide 8 text

Elástico O sistema permanece responsivo diante de uma carga de trabalho variável. @kamilah_santos

Slide 9

Slide 9 text

MESSAGE DRIVEN Aplicações reativas dependem da passagem de mensagens assíncronas para estabelecer um limite entre os componentes, garantindo um acoplamento flexível , isolamento e transparência @kamilah_santos

Slide 10

Slide 10 text

Maior uso das features funcionais/reativas do java @kamilah_santos

Slide 11

Slide 11 text

@kamilah_santos

Slide 12

Slide 12 text

@kamilah_santos

Slide 13

Slide 13 text

@kamilah_santos

Slide 14

Slide 14 text

@kamilah_santos

Slide 15

Slide 15 text

@kamilah_santos

Slide 16

Slide 16 text

Spring Web Flux @kamilah_santos

Slide 17

Slide 17 text

Spring 5 abriu para o paradigma reativo e introduziu o WebFlux @kamilah_santos

Slide 18

Slide 18 text

Ele é uma estrutura assíncrona, podendo ser executada usando Servlet 3.1 NIO API @kamilah_santos

Slide 19

Slide 19 text

E também com ambientes em tempo de execução como o Netty @kamilah_santos

Slide 20

Slide 20 text

A reactive Stream specification visa padronizar as bibliotecas de Programação Reativa na JVM e, mais importante, especificar como elas devem se comportar para serem interoperáveis @kamilah_santos

Slide 21

Slide 21 text

Bibliotecas @kamilah_santos

Slide 22

Slide 22 text

RXJava @kamilah_santos

Slide 23

Slide 23 text

O principal objeto que representa um stream são os Observables @kamilah_santos

Slide 24

Slide 24 text

E..o que são streams mesmo? @kamilah_santos

Slide 25

Slide 25 text

Uma sequência de eventos ordenados no tempo @kamilah_santos

Slide 26

Slide 26 text

Estando vinculado à uma fonte de dados, um stream é capaz de emitir três eventos: @kamilah_santos

Slide 27

Slide 27 text

onNext: representa algum valor @kamilah_santos

Slide 28

Slide 28 text

onError: houve algum erro na execução @kamilah_santos

Slide 29

Slide 29 text

onComplete: no caso de eventos finitos, indica que foi concluído @kamilah_santos

Slide 30

Slide 30 text

Cold Observable: a sequência de eventos só é executada seo Observable tiver um subscriber associado @kamilah_santos

Slide 31

Slide 31 text

Hot Observable: ele emite eventos independente se há algum subscriber associado @kamilah_santos

Slide 32

Slide 32 text

Reactor @kamilah_santos

Slide 33

Slide 33 text

Publisher produz dados, mas só fara algo quando tiver uma subscription para fazer o push desses dados @kamilah_santos

Slide 34

Slide 34 text

https://tech.io/playgrounds/929/reactive-programming-with-reactor-3/Intro @kamilah_santos

Slide 35

Slide 35 text

Flux @kamilah_santos

Slide 36

Slide 36 text

Pode emitir de 0 a n eventos, e também onNext, onError e onComplete @kamilah_santos

Slide 37

Slide 37 text

@kamilah_santos

Slide 38

Slide 38 text

@kamilah_santos

Slide 39

Slide 39 text

Mono @kamilah_santos

Slide 40

Slide 40 text

Emite no máximo um evento, podendo ser onNext, On Error e onComplete também @kamilah_santos

Slide 41

Slide 41 text

@kamilah_santos

Slide 42

Slide 42 text

@kamilah_santos

Slide 43

Slide 43 text

Reactor Core @kamilah_santos

Slide 44

Slide 44 text

Reactor Netty @kamilah_santos

Slide 45

Slide 45 text

Reactor Test @kamilah_santos

Slide 46

Slide 46 text

Netty @kamilah_santos

Slide 47

Slide 47 text

Estrutura de IO não bloqueante e assíncrona @kamilah_santos

Slide 48

Slide 48 text

utilizada para dev de servidores altamente escaláveis @kamilah_santos

Slide 49

Slide 49 text

é possível trabalhar a nível socket e criar seus próprios protocolos de comunicação @kamilah_santos

Slide 50

Slide 50 text

para essas configurações de servidor NIO e bom ter conhecimento das threads, event loop, buffers e gerenciamento de memória @kamilah_santos

Slide 51

Slide 51 text

@kamilah_santos

Slide 52

Slide 52 text

@kamilah_santos

Slide 53

Slide 53 text

E como isso melhora minhas aplicações? @kamilah_santos

Slide 54

Slide 54 text

Utilizando webflux é mais fácil usar as features funcionais/reativas do java @kamilah_santos

Slide 55

Slide 55 text

Logo, menos código, a legibilidade melhora @kamilah_santos

Slide 56

Slide 56 text

Netty é assincrono e não bloqueante @kamilah_santos

Slide 57

Slide 57 text

Exemplo @kamilah_santos

Slide 58

Slide 58 text

@kamilah_santos

Slide 59

Slide 59 text

@kamilah_santos

Slide 60

Slide 60 text

@kamilah_santos

Slide 61

Slide 61 text

@kamilah_santos

Slide 62

Slide 62 text

@kamilah_santos

Slide 63

Slide 63 text

@kamilah_santos

Slide 64

Slide 64 text

Demo: https://github.com/Kamilahsantos/thedevconf-demo- SpringWebFlux-SuperHeroesApi @kamilah_santos

Slide 65

Slide 65 text

Obrigada <3

Slide 66

Slide 66 text

Referências https://tech.io/playgrounds/929/reactive-programming-with-reactor- 3/transform https://www.callicoder.com/reactive-rest-apis-spring-webflux- reactive-mongo/ http://reactivex.io/languages.html https://projectreactor.io/ http://www.trieu.xyz/2019/04/netty-cookbook.html https://dzone.com/articles/build-a-simple-netty-application-with- and-without https://www.baeldung.com/netty https://developer.okta.com/blog/2018/09/21/reactive-programming- with-spring https://speakerdeck.com/olehdokuka/get-reactive-with-project- reactor-and-spring-5 @kamilah_santos