学习 Vert.x 的一些疑惑

2022-04-27 19:02:50 +08:00
 season8

最近了解到 vert.x ,它主打 高性能,低占用,生态丰富 ,宣称可全面替代 Spring 。 作为以面 Spring-CRUD-Coder, 我啪的一声就站起来了:“恐怖如斯!!!”

然后我学习了一下 vert.x 的官方文档和 demo 。由于初学,也没有实际应用,关于其低占用,高内存的优势没啥发言权。就说说实际写的感受和疑惑吧:

  1. 感觉自己在写 Node , 可能是 java 写多了,总感觉 node 可能性不如 java ,代码多了感觉很乱。
  2. Spring 有 bean 的管理,解耦,vert.x 自然是没有这些的,如果用到复杂的项目中,会不会整体结构很差?或者它就是适合做微服务?
  3. 国内使用 vert.x 的好像挺少的,gay-hub 上相关开源项目也不多,如何从 Spring 生态快速切换 vert.x 呢?
4250 次点击
所在节点    程序员
24 条回复
az467
2022-04-27 19:10:06 +08:00
1. 是的,你没感觉错,Vert.x 最初叫 Node.x 。
2/3. 所以,干脆用 Quarkus 算了。
Oktfolio
2022-04-27 22:06:43 +08:00
加个 guice
Leviathann
2022-04-27 22:31:15 +08:00
vertx 是底层库 toolkit ,不是框架级的东西,在此之上有 quarkus
micean
2022-04-27 22:34:29 +08:00
vertx 对于普通的 web 业务在性能上可能有一毛钱优势,玩 vertx 的关键在于理解他的 verticle 是怎么跑在两种线程池上又如何做到线程安全的,否则恐怕会把并发业务跑在单线程上(当年自己踩的坑)
yazinnnn
2022-04-27 22:47:24 +08:00
vertx 通过 verticle 和 service proxy 解耦,quarkus 是这么实现的,spring 的生态几乎无法迁移到 vertx ,想迁移就迁到 quarkus 吧
byte10
2022-04-27 22:49:21 +08:00
vert.x 有几个特点,天生分布式,还有异步高性能,actor 模型,一般不会出现多线程安全问题 。这玩意适合写 IO 高性能中间件类的,比如 mqtt ,网关啊等,反正不太适合做业务类的。反正我很喜欢,等协程出来,vert.x 应该会得到大量的应用,否则异步编程劝退一大波小白。
BBCCBB
2022-04-27 22:49:25 +08:00
加个 guice,
理解下 netty 的 io+线程模型或者 nodejs 的 io 模型.
sparky
2022-04-27 23:08:47 +08:00
servicecombo 了解一下
cubecube
2022-04-28 00:07:22 +08:00
@az467 Quarkus +1
statumer
2022-04-28 00:34:05 +08:00
vertx 是 Java 异步网络编程生态的代名词,但是 Java 没协程,所以编程体验其实还不如 js 。
Cbdy
2022-04-28 00:36:22 +08:00
Spring 可以和 Vert.x 一起用,不冲突
WispZhan
2022-04-28 07:54:02 +08:00
@Cbdy +1
pigspy
2022-04-28 08:43:27 +08:00
@Cbdy 是的
season8
2022-04-28 09:17:26 +08:00
@az467 感谢指路
season8
2022-04-28 09:19:13 +08:00
@Oktfolio 学到了!
season8
2022-04-28 09:29:33 +08:00
@micean verticle 这个刚接触是有点不好理解。
@Leviathann 原来如此
@yazinnnn 感谢指路,学的时候不可避免想到应用场景,就想改一个服务体验一下。
season8
2022-04-28 09:36:23 +08:00
@Cbdy 一起使用的话, vert.x 和 spring 分工 会不会很杂? 主要是使用 vert.x 的 actor 模型吗?
yazinnnn
2022-04-28 11:37:45 +08:00
spring 95%的场景都是 mvc,你直接用 vertx 的 future 的话连结果都拿不出来,想在同步模型中使用 vertx future 结果,要么转换成 reactor/mutiny/CompletionStage,然后 block/await,要么直接用 coroutine,runBlocking{ future.await }

无论哪种都比较麻烦
season8
2022-04-28 11:46:52 +08:00
@yazinnnn 😂让我想起了从 Nodejs 回调中取结果到同步响应的折磨了
dreamlike
2022-04-28 12:37:01 +08:00
"它主打 高性能,低占用,生态丰富 ,宣称可全面替代 Spring" 一直没这么说过,这两个是完全的不同的东西,spring 是大而全的框架生态,vertx 只是一个 io 工具包,提供了基于 netty 生态中的缺少的各种 client 。真正和 spring 对比的是 quarkus 。
vertx 写 web 还是推荐使用 kotlin+协程去转异步风格到同步风格,java 语法对异步原生支持不太好,除非 loom release 而且把 continuation api 放出来,不然保持性能的前提下 java 转同步风格很困难
关于你觉得写的起来和 node 一样 其实 node vertx gin axum 这种的组织结构都是这样的
如果你想的话还是要遵循 vertical 这种部署模式以享受 actor 模型带来的天然分布式和线程封闭的优点,如果觉得有点困难也可以主动忽略掉这种特性

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

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

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

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

© 2021 V2EX