生产环境可以用 springboot webflux 吗?有什么风险?

2020-08-10 17:34:19 +08:00
 Vimax

Spring MVC 构建于 Servlet API 之上,使用的是同步阻塞式 I/O 模型,什么是同步阻塞式 I/O 模型呢?就是说,每一个请求对应一个线程去处理。

Spring WebFlux 是一个异步非阻塞式的 Web 框架,它能够充分利用多核 CPU 的硬件资源去处理大量的并发请求。

如果在已有项目中,增加使用 WebFlux 替代 Spring MVC 会有兼容或者其他风险吗?

@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);
    }


}
4671 次点击
所在节点    Java
13 条回复
v2orz
2020-08-10 17:45:23 +08:00
web 应用使用没啥问题

维护成本有点高


数据库、消息队列如果没有异步驱动的话,收益不明显
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
wc951
2020-08-10 17:57:21 +08:00
webflux 是不是可以用来实现 api 网关
earther01
2020-08-10 17:59:19 +08:00
太难了,响应式编程开发难度太大。之前想从 zuul 升级成 springcloudgateway,研究一两天还是放弃了
accacc
2020-08-10 17:59:41 +08:00
@wc951 spring cloud gateway 就是用的 webflux 框架
gz911122
2020-08-10 18:01:46 +08:00
没有意义
还不如用 vertx 呢, 如果真的有需求的话
wysnylc
2020-08-10 19:07:00 +08:00
用 webflux 之前得先改 jdbc
yannxia
2020-08-10 19:10:48 +08:00
用了好几年了……大坑没有,小坑现在也几乎没有了,
以前有的小坑:
- websocket 帧大小无法设置
- 特定条件下的 connection refuse
......

---

不过一般你遇见的时候社区的 ISSUE 已经提了,不过要考虑是不是容易更新版本在生产环境下。
th00000
2020-08-10 19:16:46 +08:00
异步非阻塞式的 Java web 框架可以考虑 Vert.x
chihiro2014
2020-08-11 03:02:17 +08:00
没有啥大问题,现在国外 Webflux 还是挺流行的,如果会响应式开发的话。
毕竟很多大公司都在往这个方面发展。
可以看看这个视频
https://www.bilibili.com/video/BV1Cp4y1S7Yx
zzl22100048
2020-08-11 07:40:03 +08:00
webflux 的 jdbc 已经出来
MephistoLynn
2020-10-11 17:18:58 +08:00
查查 R2DBC 吧,早就有响应式的关系型持久层框架了
layxy
321 天前
感觉还是等 java 的'协程'出来吧,这个生态目前不健全,性能提升不明显

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/697130

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX