在Spring Boot2中引入了 Reactor Netty ,不过名字叫 Webflux 。
org.springframework.boot:spring-boot-starter-webflux
->io.projectreactor.netty:reactor-netty
->io.netty:netty-all
要了解 WebFlux ,首先了解下什么是 Reactive Streams(响应式流) :
要真打算用weblux,感觉需要整体学一下Reactive响应式编程,否则很多东西不懂
Reactive Streams 是 JVM 中面向流的库标准和规范:
- 处理可能无限数量的元素
- 按顺序处理
- 组件之间异步传递
- 强制性非阻塞背压(Backpressure)
Reactive Streams 的组成
- 发布者:发布元素到订阅者
- 订阅者:消费元素
- 订阅:在发布者中,订阅被创建时,将与订阅者共享
- 处理器:发布者与订阅者之间处理数据
Reactive Streams 响应式编程
Reactor 一般提供两种响应式 API :
- Mono:实现发布者,并返回 0 或 1 个元素
- Flux:实现发布者,并返回 N 个元素
一般是将 Publisher 作为输入,在框架内部转换成 Reactor 类型并处理逻辑,然后返回 Flux 或 Mono 作为输出。
Webflux
Spring Boot Webflux 就是基于 Reactor Netty 实现的。Spring Boot 2.0 包括一个新的 spring-webflux 模块。该模块包含对响应式 HTTP 和 WebSocket 客户端的支持,以及对 REST,HTML 和 WebSocket 交互等程序的支持。
一般来说,** Spring MVC 用于同步处理,Spring Webflux 用于异步处理 ** 。
Spring Boot Webflux 有两种编程模型实现,一种类似 Spring MVC 注解方式,另一种是使用其功能性端点方式。
微服务体系结构,WebFlux 和 MVC 可以混合使用。尤其开发 IO 密集型服务的时候,选择 WebFlux 去实现。
Reactor Netty是一个异步事件驱动的网络应用程序框架。它提供非阻塞和背压就绪的TCP,HTTP和UDP客户端和服务器。顾名思义,它基于Netty框架。
Spring Boot会 自动将 Reactor Netty 配置为默认服务器。除此之外,我们可以明确地将Reactor Netty添加到我们的项目中,Spring Boot应该再次自动配置它。
WebFlux 默认是通过 Netty 启动,并且自动设置了默认端口为 8080。另外还提供了对 Jetty、Undertow 等容器的支持。开发者自行在添加对应的容器 Starter 组件依赖,即可配置并使用对应内嵌容器实例。
** spring-boot-starter **
1 | <dependency> |