spring webFlux与R2DBC
前言
前面介绍响应式编程主要用到基于Stream API的Reactor API的方式,但如今业务操作需结合springboot,所以spring webFlux使用的更多,它是类似于spring mvc的web框架,不像springmvc的阻塞操作,一个请求通常对应一个线程,而spring webFlux响应式编程,天然支持异步+非阻塞+信号驱动;而且即使web框架用到响应式编程,但瓶颈仍然可能会出现在与关系型数据库的交互,遂引入了R2DBC等响应式方式与DB交互;
Spring webFlux
与spring mvc的对比

spring webFlux兼容spring mvc的,所以原来采用spring mvc开发,后面直接新引入依赖,使用spring webFlux即可;
对于响应式编程,前面两篇其实也介绍的听详细了,所以往下简单介绍它们:
spring mvc
spring mvc通常用于命令式编程,且它是阻塞的,线程接收一个请求执行的流程:浏览器 --> Controller --> Service --> Dao;
即使Tomcat中使用APR连接器接收请求,但spring mvc在处理业务时遇到阻塞业务的IO操作,该业务线程仍然需要等待;
APR利用JNI调用本地API,在NIO线程模型基础上优化的一种连接器,所以比NIO连接器性能更高,可以大幅提升Tomcat性能;
spring webFlux
而spring webFlux则默认基于Netty接收请求,是Dao(根据请求入参去数据源查询对象【数据发布者】) --> Service --> Controller --> 浏览器(相当于订阅者),而且dao查完数据推送给service时,service还可根据背压模式决定消费能力,起到异步、非阻塞发布订阅的作用;
值得一提是,spring cloud gateway的过滤器底层用的就是webflux,所以学习spring
webflux响应式编程是很有必要的;
众所周知,spring mvc处理请求时是先交由DispatcherServlet前端控制器,而spring webFlux则是交由的前端控制器为DispatcherHandler,至于后面也是交由处理器适配器、映射器等处理,只不过DispatcherHandler使用lambda更清晰:
public Mono<Void> handle(ServerWebExchange exchange) {
if (this.handlerMappings == null) {
return createNotFoundError();
}
// 跨域问题处理
if (CorsUtils.isPreFlightRequest(exchange.getRequest

最低0.47元/天 解锁文章
1565

被折叠的 条评论
为什么被折叠?



