@[toc]
webflux
https://docs.spring.io/spring-framework/docs/current/reference/html/web-reactive.html#webflux
WebFlux有两种编程模型
- 传统的 Annotated Controllers
- 轻量的 Functional Endpoints
Annotated Controllers 注释控制器 使用方式传统的MVC方式,允许返回Flux,Mono类型
Functional Endpoints 启动非常快,占用内存少。适用小型项目,不然路由表非常复杂
Spring MVC 和 Spring WebFlux 均能使用注解驱动 Controller,然而不同点在于并发模型和阻塞特性。Spring MVC 通常是基于Servlet 和Tomcat,因此是阻塞的,而Spring WebFlux 通常是非阻塞服务,基于 Reactor 和 Netty,不会发生阻塞。
Annotated Controllers - 基于Spring MVC 注解定义请求的Webflux开发
@RestController
public class TestController {
@GetMapping("index")
public Mono<String> index(){
return Mono,just("ARTISAN CODE");
}
}
Functional Endpoints_基于函数式的Webflux开发
在基于函数式的编程模型中,有两个核心的接口,分别是 RouterFunction 和 HandlerFunction,
- RouterFunction 实现了路由功能,将请求转发给对应的 handler
- HandlerFunction 代表了处理传入请求并生成响应的函数
HandlerFunction
相当于Controller的具体处理方法,输入为请求,输出封装在Mono中的响应
@FunctionalInterface
public interface HandlerFunction<T extends ServerResponse>{
Mono<T> handle(ServerRequest request)
}
RouterFunction
相当于RequestMapping, 将Url射到具体的HandlerFunction,输入为请求,输出为封装在 Mono的HandlerFunction
@FunctionalInterface
public interface RouterFunction<T extends ServerResponse>{
MonoHandlerFunction<T> route(ServerRequest request);
}