Ticker

6/recent/ticker-posts

Programación reactiva con Spring WebFlux



En antariores tutoriales revisamos acerca de la programación reactiva y el Reactive Manifesto, este tutorial en específico reviaremos los conceptos fundamentables con relación a programacion reactiva con Spring WebFlux.

Lo que veremos en este tutorial:

  1. ¿Qué es Spring WebFlux?
  2. ¿Cómo se aplica?
  3. Ejemplos.
  4. Referencias.

Spring Framework 5 incluye un nuevo spring-webfluxmódulo. El módulo contiene soporte para clientes HTTP y WebSocket reactivos, así como para aplicaciones web de servidores reactivos que incluyen REST, navegador HTML e interacciones de estilo WebSocket.


1. ¿Qué es Spring WebFlux?

Spring WebFlux es un marco de programación reactivo basado en Java y que forma parte del proyecto Spring Framework 5. Está diseñado para proporcionar una forma eficiente y escalable de desarrollar aplicaciones web modernas que sean resistentes a fallos. 

Spring WebFlux se basa en Reactive Streams, un estándar abierto para sistemas reactivos, y proporciona una API API para programar en un estilo reactivo completamente compatible con la API Servlet existente. Esto permite a los desarrolladores beneficiarse de la programación reactiva y aprovechar todas sus principales ventajas, como la resistencia a los fallos, la escalabilidad máxima y la eficiencia en la gestión de recursos.

Spring WebFlux también proporciona una variedad de herramientas y tecnologías para facilitar el desarrollo de aplicaciones web modernas. Esto incluye una variedad de configuraciones para el servidor web más comúnmente usado, así como una configuración de servidor web integrada. 

También proporciona una variedad de bibliotecas de terceros para proporcionar soporte para lenguajes, herramientas y bibliotecas comunes. Esto permite a los desarrolladores aprovechar la programación reactiva sin comprometer la flexibilidad de la aplicación. 

En el lado del servidor, WebFlux admite 2 modelos de programación distintos: Basado en @Controlleranotaciones y otras en anotaciones compatibles también con Spring MVC. Ambos modelos de programación se ejecutan sobre la misma base reactiva que adapta los tiempos de ejecución HTTP sin bloqueo a la API Reactive Streams. 

El siguiente diagrama muestra la pila del lado del servidor que incluye Spring MVC tradicional basado en Servlet a la izquierda del spring-webmvcmódulo y también la pila reactiva a la derecha del spring-webfluxmódulo.

WebFlux puede ejecutarse en contenedores Servlet compatibles con la API de I/O (Input Output) sin bloqueo de Servlet 3.1, así como en otros tiempos de ejecución asíncronos, como Netty y Undertow. Cada tiempo de ejecución se adapta a un reactivo ServerHttpRequest y ServerHttpResponse expone el cuerpo de la solicitud y la respuesta como Flux<DataBuffer>, en lugar de InputStream y OutputStream, con contrapresión reactiva. La serialización y deserialización JSON y XML de estilo REST se admite en la parte superior como un archivo Flux<Object>, al igual que la representación de vistas HTML y los eventos enviados por el servidor.

2. ¿Cómo se aplica?

Spring WebFlux se puede aplicar para desarrollar aplicaciones web asíncronas de forma rápida y fácil. Es una alternativa a la versión síncrona de Spring MVC.

Por ejemplo, se puede usar para construir aplicaciones que necesitan recibir y procesar peticiones HTTP a través de un servidor web Reactor Netty. Esto permite a los desarrolladores crear aplicaciones con una mejor escalabilidad y rendimiento, ya que el código no se bloquea durante la ejecución. 

También se puede usar para crear aplicaciones de cliente web asíncronas para recibir y procesar solicitudes HTTP. Estas aplicaciones se construyen con Reactive Streams y ofrecen un rendimiento excelente, ya que el código no se bloquea durante la ejecución. 

Además, Spring WebFlux también se puede usar para crear aplicaciones web basadas en eventos, como un sistema de notificaciones. Estas aplicaciones se construyen con WebSocket para recibir y procesar los datos de manera asíncrona. Con Spring WebFlux, los desarrolladores pueden crear aplicaciones que se actualizan en tiempo real sin necesidad de recargarlas cada vez que se produce un cambio.

Un fragmento de código comparando SpringWebflux a la forma tradicional podría verse así:

Con SpringWebFlux:

@GetMapping("/someEndpoint")
public Mono<String> getData() {
return Mono.just("Data from WebFlux endpoint");
}

De la forma tradicional:

@GetMapping("/someEndpoint")
public String getData() {
return "Data from traditional endpoint";
}

En Spring WebFlux se introduce los tipos de componente como Mono y Flux de los cuales generan una serie de elementos.

0…1 (Mono) y 0…N (Flux) Respectivamente


Mono: Un Reactive Streams Publisher con operadores básicos que emite como máximo un elemento a través de la señal y luego termina con un Mono exitoso, con o sin valor, o solo emite una señal con error única de Mono fallido

Fuente: Project Reactor


Flux: Un Reactive Streams Publisher con operadores rx emite de 0 a N elementos y luego completa la secuencia (con éxito o con un error).

Fuente: Project Reactor


Ejemplos:

En el siguiente tutorial crearemos una API RESTful con Spring WebFlux, en especifico, aplicaremos el concepto de Mono que hace referencia de cero a un solo elemento.


Referencias:

Publicar un comentario

0 Comentarios