ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Spring WebFlux框架概述

2022-01-22 09:32:28  阅读:265  来源: 互联网

标签:异步 Spring WebFlux 阻塞 MVC 概述 webflux


Spring WebFlux框架概述

什么是 Spring WebFlux

WebFlux 是Spring5添加的新模块,是一个使用响应式编程异步非阻塞的Web开发框架,它的功能和 Spring MVC 类似。

WebFlux 以 Reactor 库为基础, 基于异步和事件驱动,可以让在有限的硬件资源里面,提升系统的吞吐量和伸缩性。

Spring WebFlux 和 Spring MVC 各自的特点

在这里插入图片描述

Spring MVC 构建于Servlet API 和 Servlet 容器,是一个同步阻塞式 I/O 框架,就是一个线程处理一个请求。

Spring WebFlux 基于 Reactive Streams API 和 Servlet 3.1+ 容器(3.1 规范新特性:异步处理支持),是一个异步非阻塞的框架,能够充分利用多核 CPU 的硬件资源去处理大量的并发请求。但 WebFlux 并不能使接口的请求响应时间缩短,仅仅能够提升吞吐量和伸缩性。

Spring WebFlux 可以使用Java8函数式编程方式来实现路由请求。

异步,同步:调用者发送请求,如果需要等着被调用者回应才能去执行其他任务就是同步,如果不需要等着被调用者回应,发送完后直接去执行其他任务的就是异步。

阻塞,非阻塞:被调用者接收到请求后,等完成请求任务后才反馈给调用者的是阻塞,接收请求后立马反馈的就是非阻塞。

Spring WebFlux 和 Spring MVC 的区别

在这里插入图片描述

相同点:

  • 都可以使用注解方式进行操作,
  • 都可以运行在Tomcat容器中。

不同点:

  • Spring MVC 采用同步阻塞式,Spring WebFlux 采用异步非阻塞,Spring MVC 更方便开发人员编写功能代码,Debug 测试等,如果 Spring MVC 能够满足的场景,就尽量不要用 WebFlux
  • WebFlux 不支持 MySql,进一步也不支持 MySQL 事务;
  • WebFlux 默认情况下使用 Netty 作为服务器;

开发中选 Spring WebFlux 还是 Spring MVC

首先:WebFlux 不是 Spring MVC 的替代方案。

根据官方的建议有以下几点可以作为参考:

  • 如果你已经使用了Spring-webmvc进行开发,并且项目运行良好,就无需更改了;何况现在大多数的三方库都是阻塞的,并不能发挥出非阻塞的优势。

  • webflux提供了相当多的选择;在服务层,可以使用(Netty, Tomcat, Jetty, Undertow, 和3.1版本以上的Servlet容器)作为web服务;在应用层,可以选择用@Controller定义还是使用函数编程定义;在编程风格上,可以选择用Reactor、RxJava或其他。

  • 如果你钟爱Java8提供的lambda表达式这种轻量级、函数式的编程风格,那么建议选择用webflux;同时对于一些轻量级应用,或者复杂度比较低的微服务,建议使用webflux以便更好的进行控制。

  • 在微服务架构中,可以将webmvc和webflux项目混合使用。两个框架都可以使用@Controller这种注解的方式,使得项目的重用更加容易。

  • 评估一个项目是否应该选择webflux的最简单的方式是,依据项目中是否会使用很多的阻塞API,比如JDBC或者一些阻塞式的API就不适用与webflux项目。

  • 响应式编程的学习路线是比较陡峭的,所以如果你身在一个大型的团队中,要考虑投入的成本,小组成员的学习成本等;

标签:异步,Spring,WebFlux,阻塞,MVC,概述,webflux
来源: https://blog.csdn.net/wpc2018/article/details/122633019

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有