Spring Web Reactive使用Servlet 3.1非阻塞特性。也可以运行于非Servlet运行时,如Netty和Undertow等。 :::tips
支持响应式的数据库
Mongo, Cassandra, Redis, Couchbase
:::

- 对每个运行时适配了一组公共的响应式 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,表示同步、非阻塞控制器方法。
