Slide 1

Slide 1 text

Java Reativo, O que é isso?

Slide 2

Slide 2 text

Ana Beatriz Neri Engenheira de Software - Itaú @anabneri /in/anabeatrizdev https:anabneri.github.io

Slide 3

Slide 3 text

Dia 1 (); JVM - Java Virtual Machine O que é reatividade Programação reativa - o que mudou a partir do Java8? Spring WebFlux Reactive Libraries: RxJava e Reactor Spring WebFlux - behind the scences

Slide 4

Slide 4 text

JVM - Java Virtual Machine @anabneri

Slide 5

Slide 5 text

@anabneri JavaC JVM JAVA BYTEC ODE

Slide 6

Slide 6 text

@anabneri

Slide 7

Slide 7 text

O que é reatividade @anabneri

Slide 8

Slide 8 text

O que é reatividade Aplicações orientadas a um alto número escalável, os usuários querem a todo o momento produtividade e assertividade Programação Reativa pode-se dizer que é um modelo de programação em fluxo de dados, em sua maioria assíncronos, em conjunto com o roteamento de eventos Funcionalidade semelhante a Threads! @anabneri

Slide 9

Slide 9 text

O que é reatividade @anabneri Assíncrono são duas tarefas que são executadas simultaneamente Um dos pilares de programação reativa e seu modelo é a ideia de fluxo de dados “streams” que podem ser criadas através de variáveis discretas Pode-se entender então por Stream como uma sequência de eventos que são ordenados por tempo, na qual só pode enviar três valores: VALOR, ERRO, CONCLUÍDO Esses eventos são conhecidos como: onNext, onError, onCompleted

Slide 10

Slide 10 text

O que é reatividade @anabneri Manifesto Reativo - sistemas reativos s̀ao baseados em 4 princípios

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

Programação reativa - o que mudou a partir do Java8? @kamilahsantos

Slide 13

Slide 13 text

@Kamilahsantos Programação reativa - o que mudou a partir do Java8?

Slide 14

Slide 14 text

@Kamilahsantos Programação reativa - o que mudou a partir do Java8?

Slide 15

Slide 15 text

@Kamilahsantos Programação reativa - o que mudou a partir do Java8?

Slide 16

Slide 16 text

@Kamilahsantos Programação reativa - o que mudou a partir do Java8?

Slide 17

Slide 17 text

@Kamilahsantos

Slide 18

Slide 18 text

Introdução ao Spring Webflux @anabneri Servidor Netty Inibe os sistemas bloqueantes que temos em aplicações com padrão MVC

Slide 19

Slide 19 text

Arquitetura Spring Webflux @anabneri Request Canal Futuro Data Flows do Servidor Servidor Netty Fila de eventos Loop de eventos ClasseHandler Controller EndPoint Callback EndPoint Funcional evento 1 evento 2 evento N 1 - canal é criado 2 - registrado com um event loop 3 - está ativo 1 - Ivativo 2 - event loop não registrados 3 - fechado Cliente não-bloqueante 1 2 3 - 1 3 - 2 4 5 6

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

PERGUNTAS?

Slide 22

Slide 22 text

Java funciona bem sendo reativo? @anabneri

Slide 23

Slide 23 text

Bibliotecas que facilitam nossa vida @anabneri

Slide 24

Slide 24 text

@anabneri

Slide 25

Slide 25 text

Java

Slide 26

Slide 26 text

RxJava

Slide 27

Slide 27 text

ReactiveX @anabneri

Slide 28

Slide 28 text

ReactiveX @anabneri

Slide 29

Slide 29 text

ReactiveX e os Observables @anabneri

Slide 30

Slide 30 text

ReactiveX e os Observables @anabneri Observador Observadores

Slide 31

Slide 31 text

ReactiveX e os Observables @anabneri Observador Observadores Publish(data) -> { If(data is life lesson) thenRead(data) } Publish(data) -> { thenRead(data) talkeAction() }

Slide 32

Slide 32 text

Hot Observer Cold Observer Connectable Obervable Single @anabneri

Slide 33

Slide 33 text

Hot Observer @anabneri

Slide 34

Slide 34 text

Hot Observer @anabneri

Slide 35

Slide 35 text

Cold Observer @anabneri

Slide 36

Slide 36 text

Cold Observer @anabneri

Slide 37

Slide 37 text

Cold Observer @anabneri

Slide 38

Slide 38 text

Connectable Obervable @anabneri

Slide 39

Slide 39 text

Connectable Obervable @anabneri

Slide 40

Slide 40 text

Single @anabneri

Slide 41

Slide 41 text

Single @anabneri

Slide 42

Slide 42 text

@kamilahsantos

Slide 43

Slide 43 text

reactor-core @kamilah_santos

Slide 44

Slide 44 text

reactor-test @kamilah_santos

Slide 45

Slide 45 text

reactor-netty @kamilah_santos

Slide 46

Slide 46 text

Flux @kamilah_santos

Slide 47

Slide 47 text

@kamilah_santos

Slide 48

Slide 48 text

@kamilah_santos

Slide 49

Slide 49 text

Mono @kamilah_santos

Slide 50

Slide 50 text

@kamilah_santos

Slide 51

Slide 51 text

@kamilah_santos

Slide 52

Slide 52 text

@kamilahsantos From: http://www.trieu.xyz/2019/04/netty-cookbook.html

Slide 53

Slide 53 text

@anabneri BORA CODAR

Slide 54

Slide 54 text

Tools @anabneri

Slide 55

Slide 55 text

No content

Slide 56

Slide 56 text

Criar conta no mongodb @anabneri

Slide 57

Slide 57 text

Iniciar o projeto no sts @anabneri

Slide 58

Slide 58 text

Dependências que vão compor o projeto @anabneri

Slide 59

Slide 59 text

Iniciando o projeto @anabneri

Slide 60

Slide 60 text

Iniciando o projeto @anabneri

Slide 61

Slide 61 text

Iniciando o projeto @anabneri

Slide 62

Slide 62 text

Criar um cluster @anabneri

Slide 63

Slide 63 text

Criar um cluster @anabneri

Slide 64

Slide 64 text

Configurando o mongodb @anabneri

Slide 65

Slide 65 text

Configurando o mongodb @anabneri

Slide 66

Slide 66 text

Configurando o mongodb @anabneri

Slide 67

Slide 67 text

Configurando o mongodb @anabneri

Slide 68

Slide 68 text

Configurando o mongodb @anabneri

Slide 69

Slide 69 text

Criando document e repository @anabneri

Slide 70

Slide 70 text

Criando document e repository @anabneri

Slide 71

Slide 71 text

No content

Slide 72

Slide 72 text

Criando document e repository @anabneri

Slide 73

Slide 73 text

No content

Slide 74

Slide 74 text

Dummy Data @anabneri

Slide 75

Slide 75 text

Criando o DummyData @anabneri

Slide 76

Slide 76 text

No content

Slide 77

Slide 77 text

Criando document e repository @anabneri

Slide 78

Slide 78 text

Criando a classe Service @anabneri

Slide 79

Slide 79 text

Service @anabneri

Slide 80

Slide 80 text

Service @anabneri

Slide 81

Slide 81 text

Criando a classe Controller @anabneri

Slide 82

Slide 82 text

Controller @anabneri

Slide 83

Slide 83 text

Controller @anabneri

Slide 84

Slide 84 text

Controller - método save @anabneri

Slide 85

Slide 85 text

Criando serviços reativos funcionais @anabneri

Slide 86

Slide 86 text

Criação de serviços de modo funcional e reativo @anabneri

Slide 87

Slide 87 text

Criação de serviços de modo funcional e reativo @anabneri

Slide 88

Slide 88 text

Criação de serviços de modo funcional e reativo @anabneri Com a criação desse método já conseguimos substituir nosso RestController, sendo assim tem que comentar essa anotação na nossa classe do controller para que quando formos testar não dê conflito

Slide 89

Slide 89 text

Criação de serviços de modo funcional e reativo @anabneri

Slide 90

Slide 90 text

Criação de serviços de modo funcional e reativo @anabneri Quando testado no browser e o postman o esperado é ter o mesmo resultado de quando criados os outros endpoints de forma comum

Slide 91

Slide 91 text

Criando o Stream de eventos @anabneri

Slide 92

Slide 92 text

Stream de eventos @anabneri -> Comentar o @Configuration da classe Router e o @Component da classe handler -> Ir na classe Controller e descomentar o @RestController pois é nessa classe que iremos inserir nosso events stream

Slide 93

Slide 93 text

Stream de eventos @anabneri

Slide 94

Slide 94 text

Stream de eventos @anabneri -> Quando testar no browser esse método vai permitir que possamos fazer mais de um requisição ao mesmo tempo tornando nossa aplicação assíncrona

Slide 95

Slide 95 text

PERGUNTAS?

Slide 96

Slide 96 text

@anabneri