¿Será esta la pila tecnológica para la próxima generación de programadores de Java?

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  ReactiveLas 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

Supongo que te gusta

Origin blog.csdn.net/JACK_SUJAVA/article/details/128499227
Recomendado
Clasificación