WebFlux:底层完全基于netty+reactor+springweb 完成一个全异步非阻塞的web响应式框架
底层:异步 + 消息队列(内存) + 事件回调机制 = 整套系统
优点:能使用少量资源处理大量请求;
0、组件对比
API功能 |
Servlet-阻塞式Web |
WebFlux-响应式Web |
前端控制器 |
DispatcherServlet |
DispatcherHandler |
处理器 |
Controller |
WebHandler/Controller |
请求、响应 |
ServletRequest、ServletResponse |
ServerWebExchange: ServerHttpRequest、ServerHttpResponse |
过滤器 |
Filter(HttpFilter) |
WebFilter |
异常处理器 |
HandlerExceptionResolver |
DispatchExceptionHandler |
Web配置 |
@EnableWebMvc |
@EnableWebFlux |
自定义配置 |
WebMvcConfigurer |
WebFluxConfigurer |
返回结果 |
任意 |
Mono、Flux、任意 |
发送REST请求 |
RestTemplate |
WebClient |
Mono: 返回0|1 数据流
Flux:返回N数据流
1、WebFlux
底层基于Netty实现的Web容器与请求/响应处理机制
参照:Spring WebFlux :: Spring Framework
1.1、引入
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.1.6</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
</dependencies>
Context 响应式上下文数据传递; 由下游传播给上游;
以前: 浏览器 --> Controller --> Service --> Dao: 阻塞式编程
现在: Dao(数据源查询对象【数据发布者】) --> Service --> Controller --> 浏览器: 响应式
当调用一个api获取数据时,无需阻塞等待数据返回,而是当有数据返回时会进行告知。可见响应式是非阻塞的,意味着调用方法后,CPU可以去做别的事情,当接收到数据响应时CPU再回来处理,这种方式提高了系统的吞吐量。
大数据流程: 从一个数据源拿到大量数据进行分析计算;
ProductVistorDao.loadData()
.distinct()
.map()
.filter()
.handle()
.subscribe();
;//加载最新的商品浏览数据