步入响应式编程篇(三)之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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值