Spring MVC 构建于 Servlet API 之上,使用的是同步阻塞式 I/O 模型,什么是同步阻塞式 I/O 模型呢?就是说,每一个请求对应一个线程去处理。
Spring WebFlux 是一个异步非阻塞式的 Web 框架,它能够充分利用多核 CPU 的硬件资源去处理大量的并发请求。
@RestController
public class HelloWebFluxController {
@GetMapping("/hello")
public String hello() {
return "Hello, WebFlux !";
}
@GetMapping("/user")
public Mono<User> getUser() {
User user = new User("张三","18");
return Mono.just(user);
}
}
1
v2orz 2020-08-10 17:45:23 +08:00
web 应用使用没啥问题
维护成本有点高 数据库、消息队列如果没有异步驱动的话,收益不明显 |
2
xjlnjut730 2020-08-10 17:49:18 +08:00
目前来看用处不大,没必要替换。适用场景比较少。风险就是遇到问题不知道怎么处理。
引用知乎的说法: 如果想要发挥出 WebFlux 的性能,需要从 Dao 到 Service,全部都要是 Mono 和 Flux,目前官方的数据层 Reactive 框架只支持 Redis,Mongo 等几个,没有 JDBC 。 要想发挥出 WebFlux 的性能就得将代码全改成响应式的,而 JDBC 目前是没支持的(至少 MySQL 还没支持),而响应式的程序不好调试和编写(相对于同步的程序),所以现在 WebFlux 的应用场景还是相对较少的。 https://zhuanlan.zhihu.com/p/95967277 |
3
wc951 2020-08-10 17:57:21 +08:00 via Android
webflux 是不是可以用来实现 api 网关
|
4
earther01 2020-08-10 17:59:19 +08:00
太难了,响应式编程开发难度太大。之前想从 zuul 升级成 springcloudgateway,研究一两天还是放弃了
|
6
gz911122 2020-08-10 18:01:46 +08:00
没有意义
还不如用 vertx 呢, 如果真的有需求的话 |
7
wysnylc 2020-08-10 19:07:00 +08:00
用 webflux 之前得先改 jdbc
|
8
yannxia 2020-08-10 19:10:48 +08:00
用了好几年了……大坑没有,小坑现在也几乎没有了,
以前有的小坑: - websocket 帧大小无法设置 - 特定条件下的 connection refuse ...... --- 不过一般你遇见的时候社区的 ISSUE 已经提了,不过要考虑是不是容易更新版本在生产环境下。 |
9
th00000 2020-08-10 19:16:46 +08:00
异步非阻塞式的 Java web 框架可以考虑 Vert.x
|
10
chihiro2014 2020-08-11 03:02:17 +08:00
没有啥大问题,现在国外 Webflux 还是挺流行的,如果会响应式开发的话。
毕竟很多大公司都在往这个方面发展。 可以看看这个视频 https://www.bilibili.com/video/BV1Cp4y1S7Yx |
11
zzl22100048 2020-08-11 07:40:03 +08:00 via iPhone
webflux 的 jdbc 已经出来
|
12
MephistoLynn 2020-10-11 17:18:58 +08:00
查查 R2DBC 吧,早就有响应式的关系型持久层框架了
|
13
layxy 2023-06-13 09:18:48 +08:00
感觉还是等 java 的'协程'出来吧,这个生态目前不健全,性能提升不明显
|