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

[TDC - Floripa] - Melhorando a performance e legibilidade de aplicações Java com Spring Web Flux

[TDC - Floripa] - Melhorando a performance e legibilidade de aplicações Java com Spring Web Flux

Você já conhece o paradigma de programação reativa? Não? Essa talk é excelente para você! Já conhece? Então vamos trocar experiências sobre o uso de WebFlux e Reactor em aplicações Java. Nesta talk abordarei o conceito de programação reativa, um pouco do conceito de Java8 Lamba e Streams , o que é o project reactor , exemplo de API com Webflux e como escrever testes para aplicações reativas.

Transcript

  1. Spring WebFlux Melhorando a performance e legibilidade de aplicações Java

    @kamilah_santos
  2. Kamila Santos Backend Developer @kamilah_santos

  3. Comunidades

  4. Manifesto Reativo @kamilah_santos

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

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

  7. Resiliente O sistema permanece responsivo diante de falhas @kamilah_santos

  8. Elástico O sistema permanece responsivo diante de uma carga de

    trabalho variável. @kamilah_santos
  9. 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
  10. Maior uso das features funcionais/reativas do java @kamilah_santos

  11. @kamilah_santos

  12. @kamilah_santos

  13. @kamilah_santos

  14. @kamilah_santos

  15. @kamilah_santos

  16. Spring Web Flux @kamilah_santos

  17. Spring 5 abriu para o paradigma reativo e introduziu o

    WebFlux @kamilah_santos
  18. Ele é uma estrutura assíncrona, podendo ser executada usando Servlet

    3.1 NIO API @kamilah_santos
  19. E também com ambientes em tempo de execução como o

    Netty @kamilah_santos
  20. 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
  21. Bibliotecas @kamilah_santos

  22. RXJava @kamilah_santos

  23. O principal objeto que representa um stream são os Observables

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

  25. Uma sequência de eventos ordenados no tempo @kamilah_santos

  26. Estando vinculado à uma fonte de dados, um stream é

    capaz de emitir três eventos: @kamilah_santos
  27. onNext: representa algum valor @kamilah_santos

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

  29. onComplete: no caso de eventos finitos, indica que foi concluído

    @kamilah_santos
  30. Cold Observable: a sequência de eventos só é executada seo

    Observable tiver um subscriber associado @kamilah_santos
  31. Hot Observable: ele emite eventos independente se há algum subscriber

    associado @kamilah_santos
  32. Reactor @kamilah_santos

  33. Publisher produz dados, mas só fara algo quando tiver uma

    subscription para fazer o push desses dados @kamilah_santos
  34. https://tech.io/playgrounds/929/reactive-programming-with-reactor-3/Intro @kamilah_santos

  35. Flux @kamilah_santos

  36. Pode emitir de 0 a n eventos, e também onNext,

    onError e onComplete @kamilah_santos
  37. @kamilah_santos

  38. @kamilah_santos

  39. Mono @kamilah_santos

  40. Emite no máximo um evento, podendo ser onNext, On Error

    e onComplete também @kamilah_santos
  41. @kamilah_santos

  42. @kamilah_santos

  43. Reactor Core @kamilah_santos

  44. Reactor Netty @kamilah_santos

  45. Reactor Test @kamilah_santos

  46. Netty @kamilah_santos

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

  48. utilizada para dev de servidores altamente escaláveis @kamilah_santos

  49. é possível trabalhar a nível socket e criar seus próprios

    protocolos de comunicação @kamilah_santos
  50. para essas configurações de servidor NIO e bom ter conhecimento

    das threads, event loop, buffers e gerenciamento de memória @kamilah_santos
  51. @kamilah_santos

  52. @kamilah_santos

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

  54. Utilizando webflux é mais fácil usar as features funcionais/reativas do

    java @kamilah_santos
  55. Logo, menos código, a legibilidade melhora @kamilah_santos

  56. Netty é assincrono e não bloqueante @kamilah_santos

  57. Exemplo @kamilah_santos

  58. @kamilah_santos

  59. @kamilah_santos

  60. @kamilah_santos

  61. @kamilah_santos

  62. @kamilah_santos

  63. @kamilah_santos

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

  65. Obrigada <3

  66. 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