Java & Reactive Streams · 2019-11-28 · de streams de forma assíncrona e com back pressure não...
Transcript of Java & Reactive Streams · 2019-11-28 · de streams de forma assíncrona e com back pressure não...
![Page 1: Java & Reactive Streams · 2019-11-28 · de streams de forma assíncrona e com back pressure não bloqueante Assíncrona: não espera um retorno imediato; processamento paralelo](https://reader034.fdocuments.in/reader034/viewer/2022042223/5ec97b2087925279d72b98ad/html5/thumbnails/1.jpg)
Globalcode – Open4education
Java & Reactive Streams
Ironi Jr. Medina
Software Engineer @SAP
![Page 2: Java & Reactive Streams · 2019-11-28 · de streams de forma assíncrona e com back pressure não bloqueante Assíncrona: não espera um retorno imediato; processamento paralelo](https://reader034.fdocuments.in/reader034/viewer/2022042223/5ec97b2087925279d72b98ad/html5/thumbnails/2.jpg)
Globalcode – Open4education
Agenda
Conceitos importantes
Reactive Systems
Reactive Streams
Conceito
Como funciona
Java 9+
Implementações
Considerações Finais
![Page 3: Java & Reactive Streams · 2019-11-28 · de streams de forma assíncrona e com back pressure não bloqueante Assíncrona: não espera um retorno imediato; processamento paralelo](https://reader034.fdocuments.in/reader034/viewer/2022042223/5ec97b2087925279d72b98ad/html5/thumbnails/3.jpg)
Globalcode – Open4education
Reactive Systems
![Page 4: Java & Reactive Streams · 2019-11-28 · de streams de forma assíncrona e com back pressure não bloqueante Assíncrona: não espera um retorno imediato; processamento paralelo](https://reader034.fdocuments.in/reader034/viewer/2022042223/5ec97b2087925279d72b98ad/html5/thumbnails/4.jpg)
Globalcode – Open4education
Reactive Systems
Antigas aplicações
Segundos de response
time
Horas de downtime
Gigabytes de dados
Pouca importância pra
TCO
Aplicações atuais
Milissegundos de
response time
Zero downtime
Petabytes de dados
Low TCO é a lei
Diferentes usuários
![Page 5: Java & Reactive Streams · 2019-11-28 · de streams de forma assíncrona e com back pressure não bloqueante Assíncrona: não espera um retorno imediato; processamento paralelo](https://reader034.fdocuments.in/reader034/viewer/2022042223/5ec97b2087925279d72b98ad/html5/thumbnails/5.jpg)
Globalcode – Open4education
Reactive Systems
Responsive
resposta rápida + consistente
Resilient
se mantém responsivo, qualquer em circunstância
Elastic
escalabilidade de recursos e instâncias
Message-Driven
mensageria assíncrona
diminuir acoplamento, separando responsabilidades
https://www.reactivemanifesto.org/
![Page 6: Java & Reactive Streams · 2019-11-28 · de streams de forma assíncrona e com back pressure não bloqueante Assíncrona: não espera um retorno imediato; processamento paralelo](https://reader034.fdocuments.in/reader034/viewer/2022042223/5ec97b2087925279d72b98ad/html5/thumbnails/6.jpg)
Globalcode – Open4education
REACTIVE STREAMS
![Page 7: Java & Reactive Streams · 2019-11-28 · de streams de forma assíncrona e com back pressure não bloqueante Assíncrona: não espera um retorno imediato; processamento paralelo](https://reader034.fdocuments.in/reader034/viewer/2022042223/5ec97b2087925279d72b98ad/html5/thumbnails/7.jpg)
Globalcode – Open4education
O que é?
Especificação que define um padrão para o processamento
de streams de
forma assíncrona e com back pressure não bloqueante
Assíncrona: não espera um retorno imediato; processamento paralelo
Back pressure: consumidor pode dizer pro produtor ir mais devagar
Não bloqueante: threads principais sempre liberadashttps://reactive-streams.org
![Page 8: Java & Reactive Streams · 2019-11-28 · de streams de forma assíncrona e com back pressure não bloqueante Assíncrona: não espera um retorno imediato; processamento paralelo](https://reader034.fdocuments.in/reader034/viewer/2022042223/5ec97b2087925279d72b98ad/html5/thumbnails/8.jpg)
Globalcode – Open4education
O que é?reactive-streams.jar
4 interfaces
Publisher
Subscriber
Subscription
Processor
JDK 9+
java.util.concurrent.
Flow.*
![Page 9: Java & Reactive Streams · 2019-11-28 · de streams de forma assíncrona e com back pressure não bloqueante Assíncrona: não espera um retorno imediato; processamento paralelo](https://reader034.fdocuments.in/reader034/viewer/2022042223/5ec97b2087925279d72b98ad/html5/thumbnails/9.jpg)
Globalcode – Open4education
Como funciona?
Faça você mesmo
JDK >= 9
implementar interfaces (java.util.concurrent.Flow.*)
seguindo as regras da especificação
passar pelo TCK
JDK < 9
+ adicionar reactive-streams.jar
![Page 10: Java & Reactive Streams · 2019-11-28 · de streams de forma assíncrona e com back pressure não bloqueante Assíncrona: não espera um retorno imediato; processamento paralelo](https://reader034.fdocuments.in/reader034/viewer/2022042223/5ec97b2087925279d72b98ad/html5/thumbnails/10.jpg)
Globalcode – Open4education
Como funciona?
Bibliotecas de terceiros
Project Reactor
Pivotal; Spring 5; Java 8+
RxJava 2 & 3
Netflix; Java 6+
Akka-Streams
Lightbend; Java 8+
Vert.x
Eclipse; Quarkus; Java 8+
![Page 11: Java & Reactive Streams · 2019-11-28 · de streams de forma assíncrona e com back pressure não bloqueante Assíncrona: não espera um retorno imediato; processamento paralelo](https://reader034.fdocuments.in/reader034/viewer/2022042223/5ec97b2087925279d72b98ad/html5/thumbnails/11.jpg)
DEMO
I HAVE NO IDEAWHAT I’M DOING
![Page 12: Java & Reactive Streams · 2019-11-28 · de streams de forma assíncrona e com back pressure não bloqueante Assíncrona: não espera um retorno imediato; processamento paralelo](https://reader034.fdocuments.in/reader034/viewer/2022042223/5ec97b2087925279d72b98ad/html5/thumbnails/12.jpg)
Globalcode – Open4education
Reactor 3
Flux -> impl. de Publisher -> 0 ~ n
Mono -> impl. de Publisher -> 0 ~ 1
Operadores para aplicar processamento nos
dados (map(), filter(), etc)
Lazy evaluation
![Page 13: Java & Reactive Streams · 2019-11-28 · de streams de forma assíncrona e com back pressure não bloqueante Assíncrona: não espera um retorno imediato; processamento paralelo](https://reader034.fdocuments.in/reader034/viewer/2022042223/5ec97b2087925279d72b98ad/html5/thumbnails/13.jpg)
Globalcode – Open4education
Desvantagens
Difícil de debbugar (mesmo com libs)
Muitas libs ainda bloqueantes
Pouca/nenhuma opção de banco de dados reativo*
Muito fácil fazer código bloqueante
*somente connection
![Page 14: Java & Reactive Streams · 2019-11-28 · de streams de forma assíncrona e com back pressure não bloqueante Assíncrona: não espera um retorno imediato; processamento paralelo](https://reader034.fdocuments.in/reader034/viewer/2022042223/5ec97b2087925279d72b98ad/html5/thumbnails/14.jpg)
Globalcode – Open4education
Resumo
O futuro é reativo, low tco
Reactive Streams = SPI
Usar libs ao invés de “reinventar a roda”
Mudança de paradigma
(imperative -> functional -> reactive)
![Page 15: Java & Reactive Streams · 2019-11-28 · de streams de forma assíncrona e com back pressure não bloqueante Assíncrona: não espera um retorno imediato; processamento paralelo](https://reader034.fdocuments.in/reader034/viewer/2022042223/5ec97b2087925279d72b98ad/html5/thumbnails/15.jpg)
Globalcode – Open4education
THANK YOU
Ironi Júnior Medina
Software Engineer @
/ironijunior
/in/ironi-junior-medina
![Page 16: Java & Reactive Streams · 2019-11-28 · de streams de forma assíncrona e com back pressure não bloqueante Assíncrona: não espera um retorno imediato; processamento paralelo](https://reader034.fdocuments.in/reader034/viewer/2022042223/5ec97b2087925279d72b98ad/html5/thumbnails/16.jpg)