博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring5的WebFlux跟WebMvc对比
阅读量:6452 次
发布时间:2019-06-23

本文共 2200 字,大约阅读时间需要 7 分钟。

创建一个SpringBoot项目

通过来创建项目

  1. 第一步
  2. 然后点击Generate Project之后就可以生成项目并且下载下来。
  3. 解压下载后的项目,然后打开IDEA->File->Open选择项目的pom进行打开。
  4. 这样子一个最简单的SpringBoot项目就搭建成功了。

通过Maven命令来创建SpringBoot项目

  1. 配置好Maven的系统路径.
  2. 然后使用命令
mvn archetype:generate  -DinteractiveMode=false -DgroupId=cn.koali -DartifactId=springboot_demo -Dversion=1.0.0-SNAPSHOT复制代码

各个参数的含义参考 3.

创建成功,会提示项目生成的地址。
4. 然后同理使用IDEA打开刚刚命令行生成的项目。 5. 接下来打开
找到Build with Maven复制依赖等等即可。

通过IDEA来创建SpringBoot项目.

  1. 打开IDEA,然后File->new Project.
    填写相应的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实践

@Configurationpublic class RouterFunctionConfiguration {    @Bean    public RouterFunction
webFlux() { return RouterFunctions.route(RequestPredicates.GET("/webFlux"), request -> { Mono
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
webFlux() { return RouterFunctions.route(RequestPredicates.GET("/webFlux"), request -> { Mono
str = Mono.just("Hello World").delayElement(Duration.ofMillis(10)); return ServerResponse.ok().body(str, String.class); }); }复制代码
  1. 然后打开Jmeter
    假设有1000个用户,循环10次的发起请求。
    JMeter分别填写请求的路径
    web Flux耗时10秒左右,而且请求不会被拒绝。
    web MVC耗时21秒左右,请求多数被拒绝。

转载地址:http://jagwo.baihongyu.com/

你可能感兴趣的文章
生产环境高并发MySQL SQL语句优化案例
查看>>
Lync 小技巧-24-PDF 加密文件-转-Word-操作手册
查看>>
ASP.NET性能优化之分布式Session
查看>>
TaffyDB Introduction
查看>>
Piwik 1.9.1 发布,网站访问统计系统
查看>>
【转】ie6 png 透明终极解决方案
查看>>
CentOS6.5菜鸟之旅:关于搜索的shell命令
查看>>
扩展ViewFlow避免和ViewPager滑动冲突,同时支持无限循环,并完美和CircleFlowIndicator结合...
查看>>
VC++之自定义消息
查看>>
JAVA数组的定义及用法
查看>>
Robots协议具体解释
查看>>
eclipse设置显示代码行数(转)
查看>>
【设计模式】状态模式
查看>>
Python的全局变量
查看>>
在JTextField中监听回车键,并执行相应按钮
查看>>
封装用于解析NSDate的便利的类
查看>>
[OpenCV] 3、直线提取 houghlines
查看>>
C++ string char[] 转化
查看>>
CreateFile使用方法和样例
查看>>
mysql delete from
查看>>