spring5新框架 webFlux
- 响应式的Web框架,springboot2才开始支持
- 需要了解RxJava和Reactor,Reactor是webFlux默认的实现方式
首先了解响应式编程
响应式编程是一种面向数据流和变化传播的编程范式
响应式宣言:
- 快速响应:尽可能块的响应
- 可恢复:强大的容错和修复机制
- 可伸缩:根据自身压力变化,释放或扩展服务器的能力
- 响应式编程的三层
- router functions:路由分发,根据请求的事件,分发到具体类具体方法
- spring webFlux:控制层,处理业务逻辑前进行的封装和控制数据流返回格式等。
- http/Reactive streams:将结果转换为数据流的过程
spring webFlux两种开发方式
- 类似springMVC模式,主要,因为通用
- 函数功能性编程
Reactor模式
Reactor封装数据流的类
-
Flux:存放0-n个数据流序列,一个一个发送给客户端
-
Mono:存放0-1个数据流序列
Flux与Mono可以互相转换 -
背压
如果服务器短时间内大量数据流给客户端,客户端可能被压垮,为此可采用响应式拉取,服务器一次发送给客户端一个数据流,客户端处理完这个序列后,服务器再发送… -
springMVC使用DispatcherServlet,webFlux使用WebHandler,类似以上
-
wenFlux持久层接口使用ReactiveMongoRepository
例:
Flux findUsers( )0-N个数据流序列
Mono 0-1个数据流序列
客户端端调用WebClient
- WebClient比restTemplate更强大,restTemplate使用在微服务间的互相调用
- 错误的处理可以使用实现webFluxConfigurer接口
- 类型转换器Converter,也是实现webFluxConfigurer接口,覆盖addFormatters,将自定义的转换器加入进来
验证器Validator
实现Validator覆盖supports和validate,之后
-
全局控制器也是实现webFluxConfigurer接口,覆盖getValidator方法。将验证器加入进去。启用验证器@Valid,如@Valid @RequestBody User u
-
局部验证器@initbinder public void initbinder(DateBinder Binder){
Binder.setValidator(new UserValidator())};
webFluxConfigurer接口还有很多功能
如配置视图解析器,还有访问资源(addResourceHandlers)等,为了区分静态资源,也可以通过spring.webFlux.Static-Path-pattern=/static/**