Pila de tecnología reactiva y servlet
En el Spring
documento oficial abierto, Reactive
podemos ver el siguiente diagrama de arquitectura en una columna, en el que es obvio Reactive
que la pila de tecnología y Servlet
la pila de tecnología son completamente paralelas. Significa que Servlet web
el tipo de nuestro desarrollo diario es solo la mitad del contenido, y la otra mitad del mundo es Reactive
Las dependencias correspondientes entre los dos son las siguientes.
<!--Servlet web 依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--Reactive web 依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
servlet-reactivo
A través del diagrama de arquitectura, podemos saber que los que se usan comúnmente Servlet web
son lo que solemos decir Spring MVC
, el soporte de la pila de tecnología subyacente JDBC
, etc., pero Reactive web
el Spring WebFlux
soporte de la capa de persistencia subyacente Mongo
, etc., pero no es compatible JDBC
.
¿Qué es Spring WebFlux?
En la figura anterior, podemos ver que Spring WebFlux
es un marco asíncrono y sin bloqueo Web
, que puede hacer un uso completo de los recursos de hardware de múltiples núcleos CPU
para manejar una gran cantidad de solicitudes simultáneas. En términos relativos Spring MVC
, Spring MVC
se construye sobre Servlet API
él, utilizando un I/O
modelo de bloqueo síncrono.
Dado que Spring WebFlux
la capa subyacente utiliza programación reactiva y una unidad asincrónica basada en eventos, puede mejorar en gran medida el rendimiento del sistema. Pero tenga en cuenta que esto no mejorará el tiempo de respuesta de la solicitud, solo aumentará el rendimiento.
Y de acuerdo con el diagrama de arquitectura anterior, podemos encontrar que Spring WebFlux
la capa de persistencia subyacente no admite JDBC
, es decir, no admite MySQL
bases de datos transaccionales,
dar una castaña
Habiendo dicho tanto antes, Spring WebFlux
¿cómo se desarrolló? case
Déjame mostrarte un ejemplo simple . A través de la documentación oficial antes de la demostración, podemos encontrar eso Spring WebFlux
y Spring MVC
podemos compartir muchos componentes, como @Controller
, Tomcat
etc., pero también hay muchas diferencias.
Spring
La dirección oficial Reactive
es: https://docs.spring.io/spring-framework/docs/current/reference/html/web-reactive.html
springmvc-springwebflux
Según el código de nuestro demo-reactive
proyecto anterior, o los socios pequeños también pueden starter.spring.io
descargar un SpringBoot
código de proyecto y agregar spring-boot-starter-webflux
dependencias.
Definir DTO
package com.example.reactive.demoreactive.dto;
public class User {
private String name;
private int age;
//省略 getter setter
}
Definir controlador
package com.example.reactive.demoreactive.controller;
import com.example.reactive.demoreactive.dto.User;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import java.util.ArrayList;
import java.util.List;
@RestController
public class UserController {
@GetMapping("/hello")
public String sayHello() {
return "hello";
}
@GetMapping("/user/get")
public Mono<User> getUser() {
User user = new User();
user.setName("Java极客技术");
user.setAge(18);
return Mono.just(user);
}
@GetMapping("/user/list")
public Flux<List<User>> getAllUser() {
User user = new User();
user.setName("Java极客技术");
user.setAge(18);
List<User> list = new ArrayList<>();
list.add(user);
return Flux.just(list);
}
}
Luego inicie nuestro servicio y luego acceda a nuestra interfaz a través de un navegador.
Los resultados de acceso de las tres interfaces anteriores son los siguientes
Hola
usuario-obtener
Lista de usuarios
Puedes ver que podemos obtener los datos normalmente en el navegador. El código de arriba SpringMVC
es muy similar al código que solemos escribir. La diferencia es que hay dos clases Mono
y sumas FLux
.
Acerca de Mono y Flux son los conceptos de programación reactiva. Mono devuelve elementos 0 o 1, y Flux devuelve elementos 0-N. Para obtener más detalles, puede consultar la documentación oficial https://projectreactor.io/docs/core/ release /api/ para ver
Resumir
Aunque a juzgar por el método de escritura anterior, no hay una gran diferencia entre el método de escritura y el método de escritura, pero los mecanismos subyacentes de los dos son completamente diferentes y las pilas de tecnología no son completamente iguales, por lo que debe basar su diario selección de tecnología Spring WebFlux
en SpringMVC
La sugerencia dada por Ah Fen aquí es que si el proyecto actual es SpringMVC
el mejor, entonces no piense en cambiar Spring WebFlux
a la arquitectura, porque no es necesario. Si desea desarrollar un nuevo proyecto, necesita un alto rendimiento y la base. capa no depende de los datos transaccionales.
De acuerdo con la base de datos, entonces puede intentar usarlo Spring WebFlux
.
Fuente: Tecnología Java Geek
Autor: Sangre de Pato Fan Tang