Vert.x:JVM 上的异步 Reactive 工具集
文章目录
- Vert.x:JVM 上的异步 Reactive 工具集
- 1、 这玩意儿是干嘛的
- 2、 为什么要用它
- 3、 怎么构建
- 4、 适合哪些人用
Vert.x:JVM 上的异步 Reactive 工具集
Vert.x 在 GitHub 上已经拿到 14.6K Star 了。
这是 Eclipse 基金会托管的 Polyglot 异步应用框架,核心仓库 vert.x 维护着 HTTP、TCP、文件系统访问等底层能力,Vert.x 生态里的其他组件都建在这套核心之上。
1、 这玩意儿是干嘛的
Vert.x Core 提供一组低阶 API,覆盖 HTTP 服务、TCP 服务、文件系统访问、事件总线、定时器、缓冲区这些基础能力。它可以被应用程序直接使用,Vert.x 体系下的 Web、Mail、Redis 客户端、数据库客户端、Reactive 扩展等组件都构建在 Core 之上。
Polyglot 是 Vert.x 最显眼的标签。它本身用 Java 写,但可以在 JVM 上跑 JavaScript、Groovy、Ruby、Kotlin、Scala 等多种语言。同一套 Vert.x 运行时,不同语言写的组件之间通过事件总线通信。
Reactive 是另一个标签。Vert.x 不绑定某个具体的 Reactive 库,但 API 设计贯彻事件驱动和非阻塞,可以和 RxJava、Mutiny、Project Reactor 配合使用。
2、 为什么要用它
写高并发后端服务的人都知道,线程模型选错了后面怎么调都是死结。一请求一线程的模型在 IO 密集场景里把线程都耗在阻塞等待上,机器资源用不满。
Vert.x 走的是 Event Loop 模型。少量事件循环线程处理大量并发连接,业务逻辑里如果要做长耗时操作,官方推荐用 Worker Executor 隔离出去,不阻塞 Event Loop。这套模型在网关、推送、IM、IoT 这些长连接场景里表现稳定。
netty layer 是 Vert.x 的底层。netty 的 ByteBuf、Channel、EventLoop 在 Vert.x 里被封装成更上层的 Buffer、NetServer、Verticle 概念,使用者不太需要直接面对 netty 的细节。
3、 怎么构建
构建 Vert.x artifact 用 maven:
mvn package跑测试:
mvntest测试可以指定 HTTP 端口和 HTTPS 端口:
mvntest-Dvertx.httpPort=8888-Dvertx.httpsPort=4044Vert.x 在 BSD 和 Linux 上支持 native transport,开启 epoll、io_uring、kqueue 各自的 profile:
mvntest-PNativeEpollmvntest-PNativeIoUringmvntest-PNativeKQueueDomain Socket 是 Linux 独有的能力:
mvntest-PNativeEpoll+DomainSockets集成测试用 vertx verify 命令跑不同 JVM 配置:
vertx verify-Dtest=FooTest构建文档:
mvn package-Pdocs-DskipTests打开 target/docs/vertx-core/java/index.html 就能看到生成的 JavaDoc。
4、 适合哪些人用
- 写高并发 Java 后端、觉得传统 Servlet 模型线程开销太重的工程师
- 想用 Kotlin 协程但又需要一个成熟异步运行时的人
- 做 API 网关、消息中转、长连接服务的团队
- 需要在 JVM 上跑多语言脚本、又想共用一套 IO 层的项目
Vert.x 不是 Spring Boot 的替代品,两个项目解决的问题不完全重叠。Spring Boot 优化的是开发效率和应用生态,Vert.x 优化的是单机资源利用率和并发上限。把这两个理解清楚了再选型,能少走很多弯路。
国内用 Vert.x 的团队比起 Spring 系来说不算多,但用户群体比较稳定,文档相对完整。在网关、推送、IoT 这些对并发和延迟敏感的领域,值得关注。
路。
国内用 Vert.x 的团队比起 Spring 系来说不算多,但用户群体比较稳定,文档相对完整。在网关、推送、IoT 这些对并发和延迟敏感的领域,值得关注。
