简介
Vert.x 是JVM上构建 响应式 应用的工具。 响应式应用既可以随着工作负载的增长而 扩展 ,又可以在出现故障时 弹性回复 。 响应式应用是 即时响应 的,因为它能有效利用系统资源并保护自身免受错误影响,从而使延迟可控。
Vert.x 背靠庞大的响应式模块生态系统,具有编写现代服务所需的一切:全面的Web技术栈,响应式数据库驱动程序、消息队列、事件流、集群支持、指标监控、分布式跟踪等等。
Vert.x 是工具包,而不是暗含黑魔法的框架:所写即所得,就这么简单。
特点
- 更高的资源利用率:与基于阻塞I/O的传统技术栈和框架相比,可以用更少的资源处理更多请求。 Vert.x非常适合各种执行环境,包括虚拟机和容器等受限环境。不再浪费资源,增加部署密度、节省开支!
- 并发与异步:致力于让 Vert.x 编程的体验变得更轻松,同时又不牺牲正确性和性能。可以选择最适合手头任务的模型:回调、Promise、Future,响应式编程(Reactive),以及(Kotlin)协程。
- 灵活性:Vert.x 是一个工具包,而不是框架,因此自然很容易组合和嵌入现有应用程序。 Vert.x 对应用程序架构没有强制要求。选择所需的模块和客户端,然后在编写应用程序时将它们组合在一起。 Vert.x 可以根据需求进行调整和扩展。
环境
- JDK 1.8 或更高版本
- 文本编辑器或 IDE
- Maven 3 或更高版本
- curl 或 HTTPie ,或浏览器,用于执行 HTTP 请求
起步
打开 start.vertx.io 网页创建一个新项目。
选择所需的 Vert.x 版本,Language 选择 Java,Build 选择 Maven, 然后输入 GroupId 和 ArtifactId。然后在 “Dependencies” 文本框输入 Vert.x Web 并将其选择添加为依赖。选择完成后,点击 Generate Project 按钮。 将zip文件保存到电脑,最后解压到任意目录。
以上步骤生成的项目包括:
- Maven 构建配置文件 pom.xml ,已配置如何构建、运行 Vert.x 程序
- Verticle 示例,及对应的 JUnit5 单元测试
- 指定了代码样式的 EditorConfig 插件配置
- Git 的忽略文件配置(.gitignore)
编码
打开 src/main/java/com/example/starter/MainVerticle.java 文件。 源码中包含一个示例 Verticle (Vert.x 的最小部署单元),该 Veticle 启动一个HTTP服务。 修改这个文件,以响应所有请求。 更改代码,如下所示:
public class MainVerticle extends AbstractVerticle {
@Override
public void start() throws Exception {
// 创建一个路由
Router router = Router.router(vertx);
// 挂载 Handler,接收所有请求路径和请求方法的请求
router.route().handler(context -> {
// 获取请求的远程地址
String address = context.request().connection().remoteAddress().toString();
// 获取请求参数 "name" 的取值
MultiMap queryParams = context.queryParams();
String name = queryParams.contains("name") ? queryParams.get("name") : "unknown";
// 写json响应
context.json(
new JsonObject()
.put("name", name)
.put("address", address)
.put("message", "Hello " + name + " connected from " + address)
);
});
// 创建 HTTP 服务
vertx.createHttpServer()
// 使用路由处理所有请求
.requestHandler(router)
// 开始监听端口
.listen(8888)
// 打印监听的端口
.onSuccess(server ->
System.out.println(
"HTTP server started on port " + server.actualPort()
)
);
}
}
以上代码创建了一个 Vert.x Web 路由(用于将HTTP请求路由到指定的请求处理器) 并以 8888 端口启动HTTP服务器。它对所有请求都返回一个JSON对象,内容包括请求的地址、 name 参数取值,以及欢迎信息。
运行
运行代码需要打开终端,并进入项目的目录。 通过以下命令构建应用:
mvn package
然后,运行应用:
$ mvn exec:java
HTTP server started on port 8888
apr 03, 2020 11:49:21 AM io.vertx.core.impl.launcher.commands.VertxIsolatedDeployer
INFO: Succeeded in deploying verticle
现在服务已经启动了,可以发送请求进行测试。
最后
Vert.x 很有趣
忘掉复杂难懂的抽象概念吧。使用 Vert.x,所写即所得! 忘掉那些“最佳实践”,回到简单的设计中,享受编写易读代码的快乐。