WebFlux programación reactiva

A, Perfil WebFlux

SpringBoot2.xSubyacentes utilizados Spring5, Spring5se introdujo la programación reactiva Spring WebFlux.

WebFluxcaracterísticas:

SpringMVCes la sincronización modelo IO bloqueada, desperdicio de recursos es relativamente grave. Y WebFluxse puede hacer asíncrono no bloqueante.

② orientado a eventos ( Event-driven), y similares Vuey Angular, como la dinámica cambios correspondientes en todo el valor asociado.

SpringMVCSe requieren proyectos a ejecutar en los contenedores de servlets como Tomcat, Jetty... pero ahora WebFluxno sólo se ejecutan en contenedor de servlets tradicional (el apoyo necesario Servlet3.1), sino también para correr en apoyo NIOde Nettyy Undertowen.

Dos, la entrada WebFlux

① la introducción de WebFluxla dependencia, introdujo webfluxno presentó spring-boot-starter-webdebido a spring-boot-starter-webuna mayor prioridad.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

② la puesta en marcha del modo por defecto Nettyel puerto 8080.

③ de codificación

Porque si es asíncrona para lograr el efecto de no bloqueo, la base de datos se debe reemplazar innoDBla base de datos, donde la base de datos de simulación de variables estáticas.

public class User {
    private long id ;
    private String name;
}   
@Service
public class UserService {

    private static final Map<Integer, User> dataMap = new HashMap<>();

    static {
        dataMap.put(1,new User(1,"a"));
        dataMap.put(2,new User(2,"b"));
        dataMap.put(3,new User(3,"c"));
        dataMap.put(4,new User(4,"d"));
    }

    /**
     * 返回所有用户
     */
    public Flux<User> getAllUser(){
        Collection<User> users = dataMap.values();
        return Flux.fromIterable(users);
    }

    /**
     * 返回具体用户
     */
    public Mono<User> getUserById(int id){
        User user = dataMap.get(id);
        return Mono.justOrEmpty(user);
    }
}
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    UserService userService;

    /**
     * 返回指定用户额
     */
    @RequestMapping("/{id}")
    public Mono<User> getUserById(@PathVariable int id){
        return userService.getUserById(id);
    }

    /**
     * 返回所有用户
     */
    @RequestMapping("/all")
    public Flux<User> getAllUsers(){
        return userService.getAllUser();
    }

    /**
     * 延迟返回用户
     * produces控制服务器返回客户端的格式
     */
    @RequestMapping(value = "/delay",produces = MediaType.APPLICATION_STREAM_JSON_VALUE)
    public Flux<User> getAllUsersDelay(){
        return userService.getAllUser().delayElements(Duration.ofSeconds(2));
    }
}

④ Descripción

MonoEs representado por 0 o asíncrono que comprende elementos de secuencia, como un solo objeto

FluxRepresenta la secuencia asíncrono que comprende 0 a N elementos, la lista de objetos array

Spring WebFluxLa aplicación no es estrictamente dependiente Servlet API, y por lo tanto no se puede utilizar como warla implementación del archivo no se puede usar el src/main/webappdirectorio.

Spring WebFluxPlantilla soporta una variedad de técnicas, incluyendo Thymeleaf, FreeMarker.

Tres, Mono, la interpretación del flujo de API

Publicado 81 artículos originales · ganado elogios 124 · vistas 380 000 +

Supongo que te gusta

Origin blog.csdn.net/qq_38697437/article/details/104653025
Recomendado
Clasificación