jtlgb

导航

 

什么是webFlux

image
左侧是传统的基于Servlet的Spring Web MVC框架,右侧是5.0版本新引入的基于Reactive Streams的Spring WebFlux框架,从上到下依次是Router Functions,WebFlux,Reactive Streams三个新组件。

  • Router Functions: 对标@Controller,@RequestMapping等标准的Spring MVC注解,提供一套函数式风格的API,用于创建Router,Handler和Filter。
  • WebFlux: 核心组件,协调上下游各个组件提供响应式编程支持。
  • Reactive Streams: 一种支持背压(Backpressure)的异步数据流处理标准,主流实现有RxJava和Reactor,Spring WebFlux默认集成的是Reactor。

在Web容器的选择上,Spring WebFlux既支持像Tomcat,Jetty这样的的传统容器(前提是支持Servlet 3.1 Non-Blocking IO API),又支持像Netty,Undertow那样的异步容器。不管是何种容器,Spring WebFlux都会将其输入输出流适配成Flux<DataBuffer>格式,以便进行统一处理。

值得一提的是,除了新的Router Functions接口,Spring WebFlux同时支持使用老的Spring MVC注解声明Reactive Controller。和传统的MVC Controller不同,Reactive Controller操作的是非阻塞的ServerHttpRequestServerHttpResponse,而不再是Spring MVC里的HttpServletRequestHttpServletResponse

  1.  @GetMapping("/reactive/restaurants")
  2.  public Flux<Restaurant> findAll() {
  3.  return restaurantRepository.findAll();
  4.  }

可以看到主要变化就是在 返回的类型上Flux<Restaurant>

Flux和Mono 是 Reactor 中的流数据类型,其中Flux会发送多次,Mono会发送0次或一次

使用webflux需要具备的基础是Reactive programming 的理解。 
Reactor 的基础 和 熟练的java8 lambda使用

posted on 2018-09-17 16:02  jtlgb  阅读(1018)  评论(0编辑  收藏  举报