优秀的编程知识分享平台

网站首页 > 技术文章 正文

Spring5的WebFlux跟WebMvc对比(springwebflux优势)

nanyue 2024-08-20 17:32:00 技术文章 4 ℃
  1. 第一步
  1. 然后点击Generate Project之后就可以生成项目并且下载下来。
  2. 解压下载后的项目,然后打开IDEA->File->Open选择项目的pom进行打开。

  1. 这样子一个最简单的SpringBoot项目就搭建成功了。

通过Maven命令来创建SpringBoot项目

  1. 配置好Maven的系统路径.

  1. 然后使用命令

mvn archetype:generate -DinteractiveMode=false -DgroupId=cn.koali -DartifactId=springboot_demo -Dversion=1.0.0-SNAPSHOT

复制代码

各个参数的含义参考官网 3.

创建成功,会提示项目生成的地址。

4. 然后同理使用IDEA打开刚刚命令行生成的项目。 5. 接下来打开SpringBoot简单教程

找到Build with Maven复制依赖等等即可。

通过IDEA来创建SpringBoot项目.

  1. 打开IDEA,然后File->new Project.

  1. 填写相应的Group,Artifact,然后选择需要的依赖即可以。

使用Spring5.0的web Flux

Web Flux是什么?

  1. Spring WebFlux是异步,非阻塞的。
  2. WebFlux有Mono,Flux两种集合类型。
  3. Mono是0->1集合类型,比如Mono。
  4. Flux是1->n集合类型,比如Flux<List>
  5. Mono,Flux都是异步处理的,而集合对象基本上是同步的。

Web Flux(Netty)跟Web MVC(Servlet)有什么区别?

  1. Web Flux支持Java 8 lamba表达式。
  2. Web MVC是同步阻塞的IO模型,而Web Flux是异步非阻塞的IO模型。

Web Flux(Netty)跟Web MVC(Servlet)优缺点?

  1. Web Flux的效率(qps)比Web MVC高。
  2. Web Flux的编程难度高,维护成本高,对于切面等不好编写。

Web Flux实践

@Configuration

public class RouterFunctionConfiguration {

@Bean

public RouterFunction<ServerResponse> webFlux() {

return RouterFunctions.route(RequestPredicates.GET("/webFlux"), request -> {

Mono<String> str = Mono.just("Hello World").delayElement(Duration.ofMillis(10));

return ServerResponse.ok().body(str, String.class);

});

}

}

复制代码

与Web MVC类似。我们声明我们的路由类为 @Configuration ,然后初始化一个Bean。 在Web Flux请求的接口是RequestServer,响应的接口是ResponseServer。 其中RouterFunction提供了route,通过在route这个方法我们设置RequestPredicates 的路由行为,从而达到接受请求。

验证Web Flux和Web MVC哪个效率高

  1. 首先写两个API,一个使用 Web Flux ,一个使用 Web MVC ,然后阻塞10秒,假装用户思考了10秒。

//web mvc

@GetMapping("/webServlet")

public String webServlet(){

try {

TimeUnit.MILLISECONDS.sleep(10);

} catch (InterruptedException e) {

return "Error during thread sleep";

}

return "Hello World";

}

//web flux

@Bean

public RouterFunction<ServerResponse> webFlux() {

return RouterFunctions.route(RequestPredicates.GET("/webFlux"), request -> {

Mono<String> str = Mono.just("Hello World").delayElement(Duration.ofMillis(10));

return ServerResponse.ok().body(str, String.class);

});

}

复制代码

  1. 然后打开Jmeter

  1. 假设有1000个用户,循环10次的发起请求。

  1. JMeter分别填写请求的路径

  1. web Flux耗时10秒左右,而且请求不会被拒绝。

  1. web MVC耗时21秒左右,请求多数被拒绝。

Tags:

最近发表
标签列表