Spring Web Reactive使用Servlet 3.1非阻塞特性。也可以运行于非Servlet运行时,如Netty和Undertow等。 :::tips

支持响应式的数据库

Mongo, Cassandra, Redis, Couchbase ::: image.png

  • 对每个运行时适配了一组公共的响应式 ServerHttpRequest 和 ServerHttpResponse 抽象,以Flux 的形式暴露请求和响应,读写完全支持背压。
  • spring-core 模块提供了 Encoder 和 Decoder 契约,用于对 Flux 的数据进行序列化和反序列化。
  • spring-web 模块添加了JSON和XML的实现,用于web应用或其他的SSE流和零拷贝文件传输。
  • spring-web-reactive 模块包含了Spring Web Reactive框架以支持@Controller编程模型。
  • 重新定义了很多Spring MVC的契约,如 HandlerMapping 和 HandlerAdapter 以支持异步和非阻塞,响应式地操作HTTP的请求和响应。
  • Spring MVC和Spring Web Reactive不共享任何代码,处理逻辑有很多是共通的。
  • 跟Spring MVC的编程模型一样,但是支持响应式类型并且以响应式的方式执行。

下述类型都可以作为控制器方法的@RequestBody参数来使用:

  • Account account  — account在调用控制器之前非阻塞地反序列化。
  • Mono account  —控制器使用 Mono 声明执行的逻辑,当account反序列化之后执行。
  • Single account  — 跟 Mono 一样,但是使用RxJava执行引擎。
  • Flux accounts  — 输入流场景
  • Observable accounts  — 使用RxJava的输入流

返回值类型:

  • Mono  — 当Mono结束,非阻塞地序列化给定的Account对象
  • Singe  — 跟Mono的一样,但是使用RxJava执行引擎。
  • Flux  — 流场景,根据请求content type的不同,有可能是SSE。
  • Flux  — SSE 流。
  • Observable  — 使用RxJava执行引擎的SSE流。
  • Mono  — 当Mono结束,请求处理结束。
  • void  — 当方法返回,请求处理结束。表示同步、非阻塞的控制器方法。
  • Account  — 非阻塞地序列化给定的Account,表示同步、非阻塞控制器方法。