SlideShare ist ein Scribd-Unternehmen logo
1 von 62
Downloaden Sie, um offline zu lesen
Meetup Spring Madrid - WebFlux
Spring WebFlux
Meetup Spring Madrid - WebFlux
Grupo de meetup de Spring Madrid
¡ Bienvenidos !
Meetup Spring Madrid - WebFlux
BIO
Arquitecto Software @ ParadigmaDigital
alberto.grande@gmail.com
@alberto_grande
Meetup Spring Madrid - WebFlux
Programación Reactiva
“
In computing, reactive programming is a
declarative programming paradigm
concerned with data streams and the
propagation of change.
”
https://www.reactivemanifesto.org/
Meetup Spring Madrid - WebFlux
Reactive Streams
Publisher
También llamados Observables. Estos objetos son los que emiten el
flujo de datos
Subscriber
También llamados Observers. Estos objetos son a los que se les
notifican los cambios en el flujo de datos que emite el Publisher
Subscription
Una suscripción se creará en el lado del ‘Publisher’ y se compartirá
con el ‘Subscriber’
Processor
Un procesador puede ser utilizado entre el ‘Publisher’ y el
‘Subscriber’ para realizar transformaciones
La especificación de ‘Reactive Stream’ es un estándar y desde Java 9
se incluye en el Flow API
Programación Reactiva - Conceptos
Meetup Spring Madrid - WebFlux
Es un proyecto que se basa en la especificación de
‘Reactive Stream’ proporcionando una
implementación.
Proporciona dos tipos:
Mono: implementa un Publisher y devuelve 0 o 1
elementos
Flux: implementa un Publisher y devuelve N elementos
En RxJava serían un Flowable o Observable (en función
de la versión)
Project Reactor
¿Qué es?
Meetup Spring Madrid - WebFlux
La nueva versión de Spring 5 trae soporte para la
programación reactiva mediante el nuevo módulo
llamado WebFlux.
WebFlux a su vez toma como base la librería del
proyecto Reactor (https://projectreactor.io).
WebFlux permite su uso a través de anotaciones (de
forma similar al modelo de programación de Spring
Web MVC) o de forma funcional (programática)
Spring WebFlux
¿Qué es?
Editar el estilo de texto del patrón
Ejemplo
Meetup Spring Madrid - WebFlux
Spring WebFlux - Ejemplo
DB
Controller
Repository
Model
Meetup Spring Madrid - WebFlux
Spring WebFlux - Ejemplo
MongoDB
MessageController
@RestController
MessageRepository
extends ReactiveMongoRepository
Message
@Document
Meetup Spring Madrid - WebFlux
Spring WebFlux - Ejemplo
Meetup Spring Madrid - WebFlux
Spring WebFlux - Ejemplo
pom.xml
Meetup Spring Madrid - WebFlux
Spring WebFlux - Ejemplo
pom.xml
Meetup Spring Madrid - WebFlux
Spring WebFlux - Ejemplo
modelo
Meetup Spring Madrid - WebFlux
Spring WebFlux - Ejemplo
repository
Meetup Spring Madrid - WebFlux
Spring WebFlux - Ejemplo
controller
Editar el estilo de texto del patrón
Spring MVC y Spring WebFlux
Meetup Spring Madrid - WebFlux
Spring WebFlux
Spring MVC Spring WebFlux
Reactive Web API
Reactor, Reactive Streams
Servlet API
Tomcat, Jetty Netty Tomcat, Jetty
Blocking I/O Non - Blocking I/O
Ref: Juergen Hoeller
Meetup Spring Madrid - WebFlux
Spring WebFlux
Spring MVC Spring WebFlux
Reactive Web API
Reactor, Reactive Streams
Servlet API
Tomcat, Jetty Netty Tomcat, Jetty
Blocking I/O Non - Blocking I/O
Ref: Juergen Hoeller
1 Thread gestiona toda
llamada, quedando
bloqueado hasta que esta
termina produciendo la
respuesta.
Trabaja con un pool de
threads esperando a recibir
peticiones
Meetup Spring Madrid - WebFlux
Spring WebFlux
Spring MVC Spring WebFlux
Reactive Web API
Reactor, Reactive Streams
Servlet API
Tomcat, Jetty Netty Tomcat, Jetty
Blocking I/O Non - Blocking I/O
Ref: Juergen Hoeller
1 Thread gestiona toda
llamada, quedando
bloqueado hasta que esta
termina produciendo la
respuesta.
Trabaja con un pool de
threads esperando a recibir
peticiones
Idóneo si el ‘sistema de
almacenamiento’ es
bloqueante
Llamadas no bloqueantes
Modelo de concurrencia
‘event loop’
Endpoints funcionales
Idóneo si el ‘sistema de
almacenamiento’ es NO
bloqueante
Meetup Spring Madrid - WebFlux
Spring WebFlux
@Controller, @RestController
Spring MVC Spring WebFlux
Reactive Web API
Reactor, Reactive Streams
Servlet API
Tomcat, Jetty Netty Tomcat, Jetty
Blocking I/O Non - Blocking I/O
Ref: Juergen Hoeller
Meetup Spring Madrid - WebFlux
Spring WebFlux
@Controller, @RestController
Spring MVC Spring WebFlux
Reactive Web API
Reactor, Reactive Streams
Servlet API
Tomcat, Jetty Netty Tomcat, Jetty
Blocking I/O Non - Blocking I/O
Ref: Juergen Hoeller
Router
functions
Meetup Spring Madrid - WebFlux
Spring WebFlux
Spring MVC
Meetup Spring Madrid - WebFlux
Spring WebFlux
Spring WebFlux
Meetup Spring Madrid - WebFlux
Spring WebFlux
Meetup Spring Madrid - WebFlux
Spring WebFlux
El entorno de ejecución recoge una petición que hace
‘match’ con la URL especificada y la envía al
manejador de la petición
Meetup Spring Madrid - WebFlux
Spring WebFlux
El entorno de ejecución recoge una petición que hace
‘match’ con la URL especificada y la envía al
manejador de la petición
Se pasan los parámetros al método del repositorio que
devuelve un ‘Publisher’ para el objeto ‘Message’ si es
posible producirlo
Meetup Spring Madrid - WebFlux
Spring WebFlux
Meetup Spring Madrid - WebFlux
Spring WebFlux
Llega una petición
t
Meetup Spring Madrid - WebFlux
Spring WebFlux
Llega una petición
Se pasa al manejador
t
Meetup Spring Madrid - WebFlux
Spring WebFlux
Llega una petición
Se pasa al manejador
El manejador identifica los parámetros
t
Meetup Spring Madrid - WebFlux
Spring WebFlux
Llega una petición
Se pasa al manejador
El manejador identifica los parámetros
El manejador construye un pipeline para llegar al elemento Mensaje y lo devuelve.
Operación NO BLOQUEANTE
t
Meetup Spring Madrid - WebFlux
Spring WebFlux
Llega una petición
Se pasa al manejador
El manejador identifica los parámetros
El manejador construye un pipeline para llegar al elemento Mensaje y lo devuelve.
Operación NO BLOQUEANTE
El entorno de ejecución (en este caso el sistema de ‘event loop’ que proporciona WebFlux) se encarga de
registrar un Subscriber (crear una suscripción) al Publisher (el elemento Mono)
t
Meetup Spring Madrid - WebFlux
Spring WebFlux
Llega una petición
Se pasa al manejador
El manejador identifica los parámetros
El manejador construye un pipeline para llegar al elemento Mensaje y lo devuelve.
Operación NO BLOQUEANTE
El entorno de ejecución (en este caso el sistema de ‘event loop’ que proporciona WebFlux) se encarga de
registrar un Subscriber (crear una suscripción) al Publisher (el elemento Mono)
El Publisher (el elemento Mono) comienza a preguntar por el elemento ‘Message’
t
Meetup Spring Madrid - WebFlux
Spring WebFlux
Llega una petición
Se pasa al manejador
El manejador identifica los parámetros
El manejador construye un pipeline para llegar al elemento Mensaje y lo devuelve.
Operación NO BLOQUEANTE
El entorno de ejecución (en este caso el sistema de ‘event loop’ que proporciona WebFlux) se encarga de
registrar un Subscriber (crear una suscripción) al Publisher (el elemento Mono)
El Publisher (el elemento Mono) comienza a preguntar por el elemento ‘Message’
El Publisher recibirá el elemento siempre que sea posible producirlo y lo reenviará en la respuesta HTTP
t
Editar el estilo de texto del patrón
Spring WebFlux - Programación funcional
Meetup Spring Madrid - WebFlux
Spring WebFlux - Funcional
Spring WebFlux - Funcional
Meetup Spring Madrid - WebFlux
Spring WebFlux - Funcional
Spring WebFlux - Funcional
Meetup Spring Madrid - WebFlux
Spring WebFlux - Funcional - Lambdas
Spring WebFlux - Funcional - Lambdas
Editar el estilo de texto del patrón
Spring WebFlux - Server Sent Events
Meetup Spring Madrid - WebFlux
Spring WebFlux - Server Sent Events
API basada en HTTP para el envío de información push.
Permite al servidor enviar información al cliente
(comunicación en un único sentido)
¿Diferencia con los webSocket?
Los webSockets son un sistema de comunicación
basado en TCP que permite comunicación
bi-direccional entre cliente y servidor
¿Qué es?
Meetup Spring Madrid - WebFlux
Spring WebFlux - Server Sent Events
Spring WebFlux - Server Sent Events
Meetup Spring Madrid - WebFlux
Spring WebFlux - Server Sent Events
Spring WebFlux - Server Sent Events
Meetup Spring Madrid - WebFlux
Spring WebFlux - Server Sent Events
Cliente - Server Sent Events
Ref: www.w3schools.com
Editar el estilo de texto del patrón
Spring WebFlux - WebSockets
Meetup Spring Madrid - WebFlux
Spring WebFlux - WebSockets
Spring WebFlux - WebSockets
Editar el estilo de texto del patrón
Spring WebFlux - Cliente Reactivo
Meetup Spring Madrid - WebFlux
Spring WebFlux - Cliente reactivo
microservicio microservicio microservicio
microservicio
DB DB DB
Meetup Spring Madrid - WebFlux
Spring WebFlux - Cliente reactivo
microservicio microservicio microservicio
microservicio
DB DB DB
Non - Blocking I/O
Meetup Spring Madrid - WebFlux
Spring WebFlux - Cliente reactivo
microservicio microservicio microservicio
microservicio
DB DB DB
RestTemplate
Non - Blocking I/O
Blocking I/O
Meetup Spring Madrid - WebFlux
Spring WebFlux - Cliente reactivo
microservicio microservicio microservicio
microservicio
DB DB DB
WebClient
Non - Blocking I/O
Non - Blocking I/O
Meetup Spring Madrid - WebFlux
Spring WebFlux - Cliente reactivo
Spring WebFlux - Cliente reactivo
Editar el estilo de texto del patrón
Spring WebFlux - Testing
Meetup Spring Madrid - WebFlux
Spring WebFlux - Testing
Spring WebFlux - Testing
Editar el estilo de texto del patrón
Spring WebFlux - Resumen
Meetup Spring Madrid - WebFlux
Spring WebFlux - Conclusiones
● Creación de un proyecto con Spring WebFlux
● Diferencias entre Spring WebFlux y Spring MVC y sus respectivos stacks
● Flujo de trabajo
● Creación de servicios REST con Spring WebFlux
● Modelo de programación funcional
● Server Sent Events
● WebSockets
● Cliente reactivo
● Testing
Meetup Spring Madrid - WebFlux
Spring WebFlux - Conclusiones
Ref: https://medium.com/@the.raj.saxena
Rendimiento
Spring MVC Spring WebFlux
Spring MVC 1.5.10.RELEASE
Spring WebFlux 2.0.0.RELEASE
2500 users (4 requests/user)
Meetup Spring Madrid - WebFlux
Spring WebFlux - Conclusiones
Ref: https://medium.com/@the.raj.saxena
Rendimiento
Spring MVC Spring WebFlux
Spring MVC 1.5.10.RELEASE
Spring WebFlux 2.0.0.RELEASE
5000 users (4 requests/user)
Meetup Spring Madrid - WebFlux
Spring WebFlux - Conclusiones
Ref: https://medium.com/@the.raj.saxena
Rendimiento
Spring MVC Spring WebFlux
Spring MVC 1.5.10.RELEASE
Spring WebFlux 2.0.0.RELEASE
10000 users (4 requests/user)
We are hiring
people@paradigmadigital.com
Editar el estilo de texto del patrón
Concurso!
Meetup Spring Madrid - WebFlux
Grupo de meetup de Spring Madrid
https://kahoot.it/

Weitere ähnliche Inhalte

Was ist angesagt?

What Is Docker? | What Is Docker And How It Works? | Docker Tutorial For Begi...
What Is Docker? | What Is Docker And How It Works? | Docker Tutorial For Begi...What Is Docker? | What Is Docker And How It Works? | Docker Tutorial For Begi...
What Is Docker? | What Is Docker And How It Works? | Docker Tutorial For Begi...
Simplilearn
 

Was ist angesagt? (20)

What Is Spring Framework In Java | Spring Framework Tutorial For Beginners Wi...
What Is Spring Framework In Java | Spring Framework Tutorial For Beginners Wi...What Is Spring Framework In Java | Spring Framework Tutorial For Beginners Wi...
What Is Spring Framework In Java | Spring Framework Tutorial For Beginners Wi...
 
카카오에서의 Trove 운영사례
카카오에서의 Trove 운영사례카카오에서의 Trove 운영사례
카카오에서의 Trove 운영사례
 
From Postgres to Event-Driven: using docker-compose to build CDC pipelines in...
From Postgres to Event-Driven: using docker-compose to build CDC pipelines in...From Postgres to Event-Driven: using docker-compose to build CDC pipelines in...
From Postgres to Event-Driven: using docker-compose to build CDC pipelines in...
 
Spring Framework Tutorial | Spring Tutorial For Beginners With Examples | Jav...
Spring Framework Tutorial | Spring Tutorial For Beginners With Examples | Jav...Spring Framework Tutorial | Spring Tutorial For Beginners With Examples | Jav...
Spring Framework Tutorial | Spring Tutorial For Beginners With Examples | Jav...
 
JDBC Source Connector: What could go wrong? with Francesco Tisiot | Kafka Sum...
JDBC Source Connector: What could go wrong? with Francesco Tisiot | Kafka Sum...JDBC Source Connector: What could go wrong? with Francesco Tisiot | Kafka Sum...
JDBC Source Connector: What could go wrong? with Francesco Tisiot | Kafka Sum...
 
Python Streaming Pipelines with Beam on Flink
Python Streaming Pipelines with Beam on FlinkPython Streaming Pipelines with Beam on Flink
Python Streaming Pipelines with Beam on Flink
 
Spark Streaming | Twitter Sentiment Analysis Example | Apache Spark Training ...
Spark Streaming | Twitter Sentiment Analysis Example | Apache Spark Training ...Spark Streaming | Twitter Sentiment Analysis Example | Apache Spark Training ...
Spark Streaming | Twitter Sentiment Analysis Example | Apache Spark Training ...
 
Vert.X: Microservices Were Never So Easy (Clement Escoffier)
Vert.X: Microservices Were Never So Easy (Clement Escoffier)Vert.X: Microservices Were Never So Easy (Clement Escoffier)
Vert.X: Microservices Were Never So Easy (Clement Escoffier)
 
OpenStack을 중심으로 한 오픈 소스 & 상용 하이브리드 클라우드
OpenStack을 중심으로 한 오픈 소스 & 상용 하이브리드 클라우드OpenStack을 중심으로 한 오픈 소스 & 상용 하이브리드 클라우드
OpenStack을 중심으로 한 오픈 소스 & 상용 하이브리드 클라우드
 
Dependency Injection in Apache Spark Applications
Dependency Injection in Apache Spark ApplicationsDependency Injection in Apache Spark Applications
Dependency Injection in Apache Spark Applications
 
Microservices with Java, Spring Boot and Spring Cloud
Microservices with Java, Spring Boot and Spring CloudMicroservices with Java, Spring Boot and Spring Cloud
Microservices with Java, Spring Boot and Spring Cloud
 
What Is Docker? | What Is Docker And How It Works? | Docker Tutorial For Begi...
What Is Docker? | What Is Docker And How It Works? | Docker Tutorial For Begi...What Is Docker? | What Is Docker And How It Works? | Docker Tutorial For Begi...
What Is Docker? | What Is Docker And How It Works? | Docker Tutorial For Begi...
 
Kubernetes Architecture | Understanding Kubernetes Components | Kubernetes Tu...
Kubernetes Architecture | Understanding Kubernetes Components | Kubernetes Tu...Kubernetes Architecture | Understanding Kubernetes Components | Kubernetes Tu...
Kubernetes Architecture | Understanding Kubernetes Components | Kubernetes Tu...
 
Spring Interview Questions and Answers | Spring Tutorial | Spring Framework T...
Spring Interview Questions and Answers | Spring Tutorial | Spring Framework T...Spring Interview Questions and Answers | Spring Tutorial | Spring Framework T...
Spring Interview Questions and Answers | Spring Tutorial | Spring Framework T...
 
Kubernetes Internals
Kubernetes InternalsKubernetes Internals
Kubernetes Internals
 
Interactive real time dashboards on data streams using Kafka, Druid, and Supe...
Interactive real time dashboards on data streams using Kafka, Druid, and Supe...Interactive real time dashboards on data streams using Kafka, Druid, and Supe...
Interactive real time dashboards on data streams using Kafka, Druid, and Supe...
 
Rate Limiting with NGINX and NGINX Plus
Rate Limiting with NGINX and NGINX PlusRate Limiting with NGINX and NGINX Plus
Rate Limiting with NGINX and NGINX Plus
 
An Architectural Deep Dive With Kubernetes And Containers Powerpoint Presenta...
An Architectural Deep Dive With Kubernetes And Containers Powerpoint Presenta...An Architectural Deep Dive With Kubernetes And Containers Powerpoint Presenta...
An Architectural Deep Dive With Kubernetes And Containers Powerpoint Presenta...
 
Architecting for Scale
Architecting for ScaleArchitecting for Scale
Architecting for Scale
 
Spring Framework - Core
Spring Framework - CoreSpring Framework - Core
Spring Framework - Core
 

Ähnlich wie Programación Reactiva con Spring WebFlux

Servlets y jsp
Servlets y jspServlets y jsp
Servlets y jsp
dtbadboy0
 
Joserojas Web 2.0
Joserojas Web 2.0Joserojas Web 2.0
Joserojas Web 2.0
Jose Rojas
 
Hands-on Spring 3: The next generation
Hands-on Spring 3: The next generationHands-on Spring 3: The next generation
Hands-on Spring 3: The next generation
Sergi Almar i Graupera
 

Ähnlich wie Programación Reactiva con Spring WebFlux (20)

5.- PPT 2022 05 U01 T01 Desarrollo de Servicios Web I (1915).pptx
5.- PPT 2022 05 U01 T01 Desarrollo de Servicios Web I (1915).pptx5.- PPT 2022 05 U01 T01 Desarrollo de Servicios Web I (1915).pptx
5.- PPT 2022 05 U01 T01 Desarrollo de Servicios Web I (1915).pptx
 
Spring Mvc Final
Spring Mvc FinalSpring Mvc Final
Spring Mvc Final
 
CrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NETCrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NET
 
Cross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netCross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.net
 
UDA-Guia desarrollo web services
UDA-Guia desarrollo web servicesUDA-Guia desarrollo web services
UDA-Guia desarrollo web services
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
Linq to sql 6
Linq to sql 6Linq to sql 6
Linq to sql 6
 
Servicios web java, php, perl, google
Servicios web java, php, perl, googleServicios web java, php, perl, google
Servicios web java, php, perl, google
 
Desarrollo web
Desarrollo webDesarrollo web
Desarrollo web
 
Servlets y jsp
Servlets y jspServlets y jsp
Servlets y jsp
 
Servicios web
Servicios webServicios web
Servicios web
 
Servicios web Extendido_error perl
Servicios web Extendido_error perlServicios web Extendido_error perl
Servicios web Extendido_error perl
 
Presentacion sesion01 - Programacion WEB
Presentacion sesion01 - Programacion WEBPresentacion sesion01 - Programacion WEB
Presentacion sesion01 - Programacion WEB
 
Joserojas Web 2.0
Joserojas Web 2.0Joserojas Web 2.0
Joserojas Web 2.0
 
Introduccion aspnet
Introduccion aspnetIntroduccion aspnet
Introduccion aspnet
 
Introduccion aspnet
Introduccion aspnetIntroduccion aspnet
Introduccion aspnet
 
Desarrollo de Aplicaciones con Microsoft Ajax 1.0 y Ajax Control Toolkit
Desarrollo de Aplicaciones con Microsoft Ajax 1.0 y Ajax Control ToolkitDesarrollo de Aplicaciones con Microsoft Ajax 1.0 y Ajax Control Toolkit
Desarrollo de Aplicaciones con Microsoft Ajax 1.0 y Ajax Control Toolkit
 
CLASE03_TEMA02_2.pptx
CLASE03_TEMA02_2.pptxCLASE03_TEMA02_2.pptx
CLASE03_TEMA02_2.pptx
 
Hands-on Spring 3: The next generation
Hands-on Spring 3: The next generationHands-on Spring 3: The next generation
Hands-on Spring 3: The next generation
 
Linq to sql 3
Linq to sql 3Linq to sql 3
Linq to sql 3
 

Mehr von Paradigma Digital

Mehr von Paradigma Digital (20)

Ddd + ah + microservicios
Ddd + ah + microserviciosDdd + ah + microservicios
Ddd + ah + microservicios
 
Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.
Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.
Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.
 
Have you met Istio?
Have you met Istio?Have you met Istio?
Have you met Istio?
 
Linkerd a fondo
Linkerd a fondoLinkerd a fondo
Linkerd a fondo
 
Horneando apis
Horneando apisHorneando apis
Horneando apis
 
Java 8 time to join the future
Java 8  time to join the futureJava 8  time to join the future
Java 8 time to join the future
 
Orquestando microservicios como lo hace Netflix
Orquestando microservicios como lo hace NetflixOrquestando microservicios como lo hace Netflix
Orquestando microservicios como lo hace Netflix
 
Meetup microservicios: API Management
Meetup microservicios: API ManagementMeetup microservicios: API Management
Meetup microservicios: API Management
 
Meetup de kubernetes, conceptos básicos.
Meetup  de kubernetes, conceptos básicos.Meetup  de kubernetes, conceptos básicos.
Meetup de kubernetes, conceptos básicos.
 
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptxDocker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
 
Implementando microservicios
Implementando microserviciosImplementando microservicios
Implementando microservicios
 
Equipo de Marketing de Paradigma Digital
Equipo de Marketing de Paradigma DigitalEquipo de Marketing de Paradigma Digital
Equipo de Marketing de Paradigma Digital
 
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
 
Overview atlas (1)
Overview atlas (1)Overview atlas (1)
Overview atlas (1)
 
Cómo usar google analytics
Cómo usar google analyticsCómo usar google analytics
Cómo usar google analytics
 
Transformación Digital
Transformación DigitalTransformación Digital
Transformación Digital
 
Manuel Hurtado. Couchbase paradigma4oct
Manuel Hurtado. Couchbase paradigma4octManuel Hurtado. Couchbase paradigma4oct
Manuel Hurtado. Couchbase paradigma4oct
 
¿Cómo vencer a los dragones digitales?
¿Cómo vencer a los dragones digitales?¿Cómo vencer a los dragones digitales?
¿Cómo vencer a los dragones digitales?
 
Python y Flink
Python y FlinkPython y Flink
Python y Flink
 
Kafka y python
Kafka y pythonKafka y python
Kafka y python
 

Kürzlich hochgeladen

Unidad V. Disoluciones quimica de las disoluciones
Unidad V. Disoluciones quimica de las disolucionesUnidad V. Disoluciones quimica de las disoluciones
Unidad V. Disoluciones quimica de las disoluciones
chorantina325
 

Kürzlich hochgeladen (6)

¡Descubre el Poder del Masaje Holístico en nuestra Primera Sesión del Seminar...
¡Descubre el Poder del Masaje Holístico en nuestra Primera Sesión del Seminar...¡Descubre el Poder del Masaje Holístico en nuestra Primera Sesión del Seminar...
¡Descubre el Poder del Masaje Holístico en nuestra Primera Sesión del Seminar...
 
Corte de luz 2024 Guayaquil Guayas ecuad
Corte de luz 2024 Guayaquil Guayas ecuadCorte de luz 2024 Guayaquil Guayas ecuad
Corte de luz 2024 Guayaquil Guayas ecuad
 
Las redes sociales en el mercado digital
Las redes sociales en el mercado digitalLas redes sociales en el mercado digital
Las redes sociales en el mercado digital
 
Unidad V. Disoluciones quimica de las disoluciones
Unidad V. Disoluciones quimica de las disolucionesUnidad V. Disoluciones quimica de las disoluciones
Unidad V. Disoluciones quimica de las disoluciones
 
PSICOPATOLOGIA I.pptxdhehehehehehehehehe
PSICOPATOLOGIA I.pptxdhehehehehehehehehePSICOPATOLOGIA I.pptxdhehehehehehehehehe
PSICOPATOLOGIA I.pptxdhehehehehehehehehe
 
PPT-HISTORIA-6°-ABC.pptxjjjjjjjjjjjjjjjjjjjjjj
PPT-HISTORIA-6°-ABC.pptxjjjjjjjjjjjjjjjjjjjjjjPPT-HISTORIA-6°-ABC.pptxjjjjjjjjjjjjjjjjjjjjjj
PPT-HISTORIA-6°-ABC.pptxjjjjjjjjjjjjjjjjjjjjjj
 

Programación Reactiva con Spring WebFlux

  • 1. Meetup Spring Madrid - WebFlux Spring WebFlux
  • 2. Meetup Spring Madrid - WebFlux Grupo de meetup de Spring Madrid ¡ Bienvenidos !
  • 3. Meetup Spring Madrid - WebFlux BIO Arquitecto Software @ ParadigmaDigital alberto.grande@gmail.com @alberto_grande
  • 4. Meetup Spring Madrid - WebFlux Programación Reactiva “ In computing, reactive programming is a declarative programming paradigm concerned with data streams and the propagation of change. ” https://www.reactivemanifesto.org/
  • 5. Meetup Spring Madrid - WebFlux Reactive Streams Publisher También llamados Observables. Estos objetos son los que emiten el flujo de datos Subscriber También llamados Observers. Estos objetos son a los que se les notifican los cambios en el flujo de datos que emite el Publisher Subscription Una suscripción se creará en el lado del ‘Publisher’ y se compartirá con el ‘Subscriber’ Processor Un procesador puede ser utilizado entre el ‘Publisher’ y el ‘Subscriber’ para realizar transformaciones La especificación de ‘Reactive Stream’ es un estándar y desde Java 9 se incluye en el Flow API Programación Reactiva - Conceptos
  • 6. Meetup Spring Madrid - WebFlux Es un proyecto que se basa en la especificación de ‘Reactive Stream’ proporcionando una implementación. Proporciona dos tipos: Mono: implementa un Publisher y devuelve 0 o 1 elementos Flux: implementa un Publisher y devuelve N elementos En RxJava serían un Flowable o Observable (en función de la versión) Project Reactor ¿Qué es?
  • 7. Meetup Spring Madrid - WebFlux La nueva versión de Spring 5 trae soporte para la programación reactiva mediante el nuevo módulo llamado WebFlux. WebFlux a su vez toma como base la librería del proyecto Reactor (https://projectreactor.io). WebFlux permite su uso a través de anotaciones (de forma similar al modelo de programación de Spring Web MVC) o de forma funcional (programática) Spring WebFlux ¿Qué es?
  • 8. Editar el estilo de texto del patrón Ejemplo
  • 9. Meetup Spring Madrid - WebFlux Spring WebFlux - Ejemplo DB Controller Repository Model
  • 10. Meetup Spring Madrid - WebFlux Spring WebFlux - Ejemplo MongoDB MessageController @RestController MessageRepository extends ReactiveMongoRepository Message @Document
  • 11. Meetup Spring Madrid - WebFlux Spring WebFlux - Ejemplo
  • 12. Meetup Spring Madrid - WebFlux Spring WebFlux - Ejemplo pom.xml
  • 13. Meetup Spring Madrid - WebFlux Spring WebFlux - Ejemplo pom.xml
  • 14. Meetup Spring Madrid - WebFlux Spring WebFlux - Ejemplo modelo
  • 15. Meetup Spring Madrid - WebFlux Spring WebFlux - Ejemplo repository
  • 16. Meetup Spring Madrid - WebFlux Spring WebFlux - Ejemplo controller
  • 17. Editar el estilo de texto del patrón Spring MVC y Spring WebFlux
  • 18. Meetup Spring Madrid - WebFlux Spring WebFlux Spring MVC Spring WebFlux Reactive Web API Reactor, Reactive Streams Servlet API Tomcat, Jetty Netty Tomcat, Jetty Blocking I/O Non - Blocking I/O Ref: Juergen Hoeller
  • 19. Meetup Spring Madrid - WebFlux Spring WebFlux Spring MVC Spring WebFlux Reactive Web API Reactor, Reactive Streams Servlet API Tomcat, Jetty Netty Tomcat, Jetty Blocking I/O Non - Blocking I/O Ref: Juergen Hoeller 1 Thread gestiona toda llamada, quedando bloqueado hasta que esta termina produciendo la respuesta. Trabaja con un pool de threads esperando a recibir peticiones
  • 20. Meetup Spring Madrid - WebFlux Spring WebFlux Spring MVC Spring WebFlux Reactive Web API Reactor, Reactive Streams Servlet API Tomcat, Jetty Netty Tomcat, Jetty Blocking I/O Non - Blocking I/O Ref: Juergen Hoeller 1 Thread gestiona toda llamada, quedando bloqueado hasta que esta termina produciendo la respuesta. Trabaja con un pool de threads esperando a recibir peticiones Idóneo si el ‘sistema de almacenamiento’ es bloqueante Llamadas no bloqueantes Modelo de concurrencia ‘event loop’ Endpoints funcionales Idóneo si el ‘sistema de almacenamiento’ es NO bloqueante
  • 21. Meetup Spring Madrid - WebFlux Spring WebFlux @Controller, @RestController Spring MVC Spring WebFlux Reactive Web API Reactor, Reactive Streams Servlet API Tomcat, Jetty Netty Tomcat, Jetty Blocking I/O Non - Blocking I/O Ref: Juergen Hoeller
  • 22. Meetup Spring Madrid - WebFlux Spring WebFlux @Controller, @RestController Spring MVC Spring WebFlux Reactive Web API Reactor, Reactive Streams Servlet API Tomcat, Jetty Netty Tomcat, Jetty Blocking I/O Non - Blocking I/O Ref: Juergen Hoeller Router functions
  • 23. Meetup Spring Madrid - WebFlux Spring WebFlux Spring MVC
  • 24. Meetup Spring Madrid - WebFlux Spring WebFlux Spring WebFlux
  • 25. Meetup Spring Madrid - WebFlux Spring WebFlux
  • 26. Meetup Spring Madrid - WebFlux Spring WebFlux El entorno de ejecución recoge una petición que hace ‘match’ con la URL especificada y la envía al manejador de la petición
  • 27. Meetup Spring Madrid - WebFlux Spring WebFlux El entorno de ejecución recoge una petición que hace ‘match’ con la URL especificada y la envía al manejador de la petición Se pasan los parámetros al método del repositorio que devuelve un ‘Publisher’ para el objeto ‘Message’ si es posible producirlo
  • 28. Meetup Spring Madrid - WebFlux Spring WebFlux
  • 29. Meetup Spring Madrid - WebFlux Spring WebFlux Llega una petición t
  • 30. Meetup Spring Madrid - WebFlux Spring WebFlux Llega una petición Se pasa al manejador t
  • 31. Meetup Spring Madrid - WebFlux Spring WebFlux Llega una petición Se pasa al manejador El manejador identifica los parámetros t
  • 32. Meetup Spring Madrid - WebFlux Spring WebFlux Llega una petición Se pasa al manejador El manejador identifica los parámetros El manejador construye un pipeline para llegar al elemento Mensaje y lo devuelve. Operación NO BLOQUEANTE t
  • 33. Meetup Spring Madrid - WebFlux Spring WebFlux Llega una petición Se pasa al manejador El manejador identifica los parámetros El manejador construye un pipeline para llegar al elemento Mensaje y lo devuelve. Operación NO BLOQUEANTE El entorno de ejecución (en este caso el sistema de ‘event loop’ que proporciona WebFlux) se encarga de registrar un Subscriber (crear una suscripción) al Publisher (el elemento Mono) t
  • 34. Meetup Spring Madrid - WebFlux Spring WebFlux Llega una petición Se pasa al manejador El manejador identifica los parámetros El manejador construye un pipeline para llegar al elemento Mensaje y lo devuelve. Operación NO BLOQUEANTE El entorno de ejecución (en este caso el sistema de ‘event loop’ que proporciona WebFlux) se encarga de registrar un Subscriber (crear una suscripción) al Publisher (el elemento Mono) El Publisher (el elemento Mono) comienza a preguntar por el elemento ‘Message’ t
  • 35. Meetup Spring Madrid - WebFlux Spring WebFlux Llega una petición Se pasa al manejador El manejador identifica los parámetros El manejador construye un pipeline para llegar al elemento Mensaje y lo devuelve. Operación NO BLOQUEANTE El entorno de ejecución (en este caso el sistema de ‘event loop’ que proporciona WebFlux) se encarga de registrar un Subscriber (crear una suscripción) al Publisher (el elemento Mono) El Publisher (el elemento Mono) comienza a preguntar por el elemento ‘Message’ El Publisher recibirá el elemento siempre que sea posible producirlo y lo reenviará en la respuesta HTTP t
  • 36. Editar el estilo de texto del patrón Spring WebFlux - Programación funcional
  • 37. Meetup Spring Madrid - WebFlux Spring WebFlux - Funcional Spring WebFlux - Funcional
  • 38. Meetup Spring Madrid - WebFlux Spring WebFlux - Funcional Spring WebFlux - Funcional
  • 39. Meetup Spring Madrid - WebFlux Spring WebFlux - Funcional - Lambdas Spring WebFlux - Funcional - Lambdas
  • 40. Editar el estilo de texto del patrón Spring WebFlux - Server Sent Events
  • 41. Meetup Spring Madrid - WebFlux Spring WebFlux - Server Sent Events API basada en HTTP para el envío de información push. Permite al servidor enviar información al cliente (comunicación en un único sentido) ¿Diferencia con los webSocket? Los webSockets son un sistema de comunicación basado en TCP que permite comunicación bi-direccional entre cliente y servidor ¿Qué es?
  • 42. Meetup Spring Madrid - WebFlux Spring WebFlux - Server Sent Events Spring WebFlux - Server Sent Events
  • 43. Meetup Spring Madrid - WebFlux Spring WebFlux - Server Sent Events Spring WebFlux - Server Sent Events
  • 44. Meetup Spring Madrid - WebFlux Spring WebFlux - Server Sent Events Cliente - Server Sent Events Ref: www.w3schools.com
  • 45. Editar el estilo de texto del patrón Spring WebFlux - WebSockets
  • 46. Meetup Spring Madrid - WebFlux Spring WebFlux - WebSockets Spring WebFlux - WebSockets
  • 47. Editar el estilo de texto del patrón Spring WebFlux - Cliente Reactivo
  • 48. Meetup Spring Madrid - WebFlux Spring WebFlux - Cliente reactivo microservicio microservicio microservicio microservicio DB DB DB
  • 49. Meetup Spring Madrid - WebFlux Spring WebFlux - Cliente reactivo microservicio microservicio microservicio microservicio DB DB DB Non - Blocking I/O
  • 50. Meetup Spring Madrid - WebFlux Spring WebFlux - Cliente reactivo microservicio microservicio microservicio microservicio DB DB DB RestTemplate Non - Blocking I/O Blocking I/O
  • 51. Meetup Spring Madrid - WebFlux Spring WebFlux - Cliente reactivo microservicio microservicio microservicio microservicio DB DB DB WebClient Non - Blocking I/O Non - Blocking I/O
  • 52. Meetup Spring Madrid - WebFlux Spring WebFlux - Cliente reactivo Spring WebFlux - Cliente reactivo
  • 53. Editar el estilo de texto del patrón Spring WebFlux - Testing
  • 54. Meetup Spring Madrid - WebFlux Spring WebFlux - Testing Spring WebFlux - Testing
  • 55. Editar el estilo de texto del patrón Spring WebFlux - Resumen
  • 56. Meetup Spring Madrid - WebFlux Spring WebFlux - Conclusiones ● Creación de un proyecto con Spring WebFlux ● Diferencias entre Spring WebFlux y Spring MVC y sus respectivos stacks ● Flujo de trabajo ● Creación de servicios REST con Spring WebFlux ● Modelo de programación funcional ● Server Sent Events ● WebSockets ● Cliente reactivo ● Testing
  • 57. Meetup Spring Madrid - WebFlux Spring WebFlux - Conclusiones Ref: https://medium.com/@the.raj.saxena Rendimiento Spring MVC Spring WebFlux Spring MVC 1.5.10.RELEASE Spring WebFlux 2.0.0.RELEASE 2500 users (4 requests/user)
  • 58. Meetup Spring Madrid - WebFlux Spring WebFlux - Conclusiones Ref: https://medium.com/@the.raj.saxena Rendimiento Spring MVC Spring WebFlux Spring MVC 1.5.10.RELEASE Spring WebFlux 2.0.0.RELEASE 5000 users (4 requests/user)
  • 59. Meetup Spring Madrid - WebFlux Spring WebFlux - Conclusiones Ref: https://medium.com/@the.raj.saxena Rendimiento Spring MVC Spring WebFlux Spring MVC 1.5.10.RELEASE Spring WebFlux 2.0.0.RELEASE 10000 users (4 requests/user)
  • 61. Editar el estilo de texto del patrón Concurso!
  • 62. Meetup Spring Madrid - WebFlux Grupo de meetup de Spring Madrid https://kahoot.it/