Spring Webflux - 03 Webflux编程模型

Posted 小小工匠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Webflux - 03 Webflux编程模型相关的知识,希望对你有一定的参考价值。

文章目录


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

@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);


以上是关于Spring Webflux - 03 Webflux编程模型的主要内容,如果未能解决你的问题,请参考以下文章

Spring Webflux - 03 Webflux编程模型

Spring Webflux Netty http 和 https

spring5 webflux,如何返回自定义json数据?

浅谈skywalking的spring-webflux-plugin

浅谈skywalking的spring-webflux-plugin

Spring Reactive Programming with Webflux - 多个操作作为非阻塞流