Spring Webflux - 03 Webflux编程模型

2022-10-08 08:54:24 浏览数 (1)

文章目录

  • webflux
  • Annotated Controllers - 基于Spring MVC 注解定义请求的Webflux开发
  • Functional Endpoints_基于函数式的Webflux开发
    • HandlerFunction
    • RouterFunction

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开发

https://docs.spring.io/spring-framework/docs/current/reference/html/web-reactive.html#webflux-controller

代码语言:javascript复制
@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中的响应

代码语言:javascript复制
@FunctionalInterface
public interface HandlerFunction<T extends ServerResponse>{
	Mono<T> handle(ServerRequest request)
}

RouterFunction

相当于RequestMapping, 将Url射到具体的HandlerFunction,输入为请求,输出为封装在 Mono的HandlerFunction

代码语言:javascript复制
@FunctionalInterface
public interface RouterFunction<T extends ServerResponse>{
	MonoHandlerFunction<T>  route(ServerRequest request);
}

0 人点赞