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

TheDevConf 2020 - Paradigma reativo? Por dentro...

TheDevConf 2020 - Paradigma reativo? Por dentro da programação reativa com Spring Webflux e Projeto Reactor - Trilha Design de Código e XP

Já ouviu falar de programação reativa? Nessa palestra vamos abordar os conceitos de programação reativa, reactive streams specification , RxJava, Spring Webflux e principalmente a biblioteca Reactor, passando pela utilização do Flux, Mono, Publisher, Subscriber e seus operadores. Também veremos como fazer sua primeira aplicação com Spring Webflux, Reactor e o Driver reativo do mongoDB

More Decks by Kamila de fatima santos oliveira

Other Decks in Programming

Transcript

  1. KAMILA SANTOS Desenvolvedora Backend Ame Digital Bacharel em ciência da

    computação Co organizadora das comunidades Perifacode, WoMakersCode e DevsJavaGirl
  2. PARADIGMA REATIVO É um paradigma de programação orientado a fluxos

    de dados/eventos, bem como a propagação dos mesmos de forma assíncrona.
  3. PARADIGMA REATIVO Por trabalhar de forma assíncrona é altamente recomendada

    para lidar com grande volume de dados que sofrem grandes mudanças em tempo real.
  4. PARADIGMA REATIVO Também é bastante utilizado em redes sociais (front

    e back) por funcionar orientado a ações do usuário que resultam em eventos.
  5. MESSAGE DRIVEN Os aplicativos reativos contam com a passagem de

    mensagens assíncronas para estabelecer um limite entre os componentes, garantindo acoplamento flexível, isolamento e transparência
  6. RXJAVA É uma implementação para a JVM das Reactie Extensions

    , que é uma biblioteca assíncrona e baseada em eventos que trabalha com sequências de observables.
  7. RXJAVA Estende do padrão observer -> cada objeto chamado (subject),

    tem uma listas de dependentes (observers) que são notificados pelo subject automaticamente a cada mudança de estado por meio de seus operadores e métodos.
  8. RXJAVA Suporta sequências de dados e eventos para compor suas

    sequências de eventos de forma declarativa.
  9. REACTIVE STREAMS Iniciativa para fornecer um padrão / guia /

    regras para processamento de fluxo assíncrono com backpressure NIO
  10. REACTIVE STREAMS destinado a ambientes de tempo de execução (JVM),

    bem como protocolos de rede.https://github.com/reactive-streams/reactive-streams-jvm
  11. REACTIVE STREAMS o objetivo principal é definir a troca de

    dados de fluxo através de um limite assíncrono.
  12. REACTIVE STREAMS seu escopo é encontrar um conjunto mínimo de

    métodos, interfaces e protocolos que irão descrever as operações e entidades necessárias para ter fluxos de dados assíncronos com backpressure NIO.
  13. BACKPRESSURE Resistência ou força que se opõe ao fluxo de

    dados desejado por meio do software. Feedback do receptor ao produtor de que ele não está suportando a carga.
  14. FLUX Pode emitir de 0 to N eventos, passando por

    OnNext (), OnComplete () e onError.
  15. COLD OBSERVABLE a sequência de eventos só é executada se

    o Observable tiver um subscriber associado
  16. SPRING WEBFLUX Spring WebFlux pode ser definido como uma versão

    “paralela” ao já conhecido e amplamente utilizado Spring MVC (servlet), tendo como principal diferença o suporte para streams NIO reativos e por suportar o conceito de backpressure com o servidor Netty vindo por default embutido em seu arquitetura.
  17. SPRING WEBFLUX A partir da versão 5.0 do Spring Framework

    temos uma parte reativa além da estrutura Servlet que já existia, cada módulo destes é opcional, você pode usar a parte Servlet, a parte reativa ou mesmo ambas em suas aplicações.
  18. SPRING WEBFLUX Spring Webflux foi desenvolvido porque precisávamos de aplicativos

    não bloqueantes que pudessem trabalhar com um pequeno número de threads simultaneamente e que pudessem ser executados com alguns recursos de hardware.
  19. SPRING WEBFLUX no Servlet 3.1, uma API NIO foi fornecida,

    mas seu uso não corresponde ao resto da API e a todos os conceitos por trás do Servlet, que possui contratos de bloqueio.
  20. SPRING WEBFLUX Estes fatores foram decisivos para o desenvolvimento de

    uma nova API que fosse utilizada independentemente do tempo de execução e de forma não bloqueante, o que foi possível com os servidores (Netty por exemplo) que se consolidaram na operação assíncrona e não bloqueante.
  21. SPRING WEBFLUX Outra razão é que o WebFlux torna mais

    fácil entender e usar conceitos de programação funcional / reativa. Com a adição de recursos funcionais do Java 8 e Flowable API no Java 9 , que permitiu ao Spring WebFlux ter functional endpoints e annotated controllers nos aplicativos.
  22. COMO AS REQUESTS FUNCIONAM? Este modelo, dependendo do volume de

    requisições e da forma como foi desenvolvido, pode causar lentidão na sua aplicação e até mesmo um erro de Out Of Memory (este tipo de erro geralmente ocorre quando mantemos objetos por muito tempo ou tentamos processar muito de dados de uma vez)
  23. REACTOR É uma biblioteca baseada nas Reactive Streams Specifications, é

    totalmente não bloqueante e interage diretamente com a API Java funcional (Stream, Duration e Completable Future), para composição de elementos utilizando Flux e Mono em arquiteturas de microsserviços , oferecendo mecanismos de backpressure prontos para TCP, UDP e HTTP (incluindo sockets da web).
  24. REACTOR Seus operators e schedulers podem suportar um grande volume

    de transferência (até 10 milhões de solicitações por segundo, de acordo com a documentação do Reactor https://projectreactor.io/), também foi a primeira biblioteca reativa a implementar alguns pontos sugeridos pela reactive streams applications( https://github.com/reactor/reactive-streams- commons), que mais tarde também foram implementados por RxJava2.
  25. REACTOR Seus módulos são fluxos reativos abstratos e interoperáveis para

    facilitar o seu desenvolvimento, podendo ser utilizados com:Spring FrameworksDrivers e clientes (por exemplo CloudFoundry Java Client https://github.com/cloudfoundry/cf-java-client)- em protocolos / contratos como R2DBC (https://r2dbc.io/) e RSocket (https://rsocket.io/), por exemplo.
  26. REACTOR CORE é a parte principal desta biblioteca, os outros

    módulos são dependentes dela, ela fornece tipos reativos que implementam um Publisher que fornece Flux e Mono
  27. REACTOR NETTY é o servidor de nosso aplicativo NIO, usada

    para o desenvolvimento de servidores altamente escaláveis.
  28. OBRIGADA <3 Demais redes sociais e demo no QRCode Linkedin

    https://www.linkedin.co m/in/kamila-santos- oliveira/ Twitter @kamilah_santos