入门指引

快速入门 Vert.x

在本快速入门指南中,你将学会如何从零搭建并运行一个基于 Vert.x Web 的微服务项目。

在开始之前,请确保你的开发环境满足以下基础要求:

  • JDK 11 或更高版本
  • 任意文本编辑器或集成开发环境(IDE)
  • Maven 3 或更高版本
  • curl、HTTPie 命令行工具或浏览器,用于发送 HTTP 测试请求

1创建项目脚手架

首先,访问在线脚手架站点 start.vertx.io。

在页面中选择你要使用的 Vert.x 版本,编程语言选择 Java,构建工具选择 Maven,并填入你期望的 Group ID 和 Artifact ID。 接着在 “Dependencies” 依赖搜索框中输入 Vert.x Web 并添加为项目依赖。 配置完成后,点击 Generate Project 按钮。 将生成的 zip 压缩包下载到本地并解压至任意工作目录。

生成的工程结构主要包含:

  • 预先配置好的 Maven 构建描述文件 pom.xml,可直接用于编译和运行应用程序
  • 一个示例 Verticle 源代码文件以及基于 JUnit 5 编写的基础测试用例
  • 编辑器代码风格规范配置文件
  • Git 版本控制忽略文件配置(.gitignore)

如果你想立即动手体验,也可以直接下载打包好的示例工程:Maven 版本 或 Gradle 版本。

2编写业务代码

使用你喜欢的 IDE 打开工程,定位到 src/main/java/com/example/starter/MainVerticle.java 源文件。 该类实现了一个示例 Verticle(Vert.x 的标准部署与执行单元),其内部启动了一个基础 HTTP 服务器。 接下来我们将对其进行扩充,让它能够向每一个访问该服务的客户端返回问候信息。 将代码修改为如下内容:

Java
Kotlin
package com.example.starter;
 
import io.vertx.core.Future;
import io.vertx.core.VerticleBase;
import io.vertx.core.MultiMap;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.web.Router;
 
public class MainVerticle extends VerticleBase {
 
  @Override
  public Future<?> start() {
    // 创建路由器
    Router router = Router.router(vertx);
 
    // 挂载处理器:拦截所有路径与 HTTP 请求方法的传入请求
    router.route().handler(context -> {
      // 获取当前请求的客户端远程连接地址
      String address = context.request().connection().remoteAddress().toString();
      // 获取 URL 查询参数 "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 服务器
    return vertx.createHttpServer()
      // 将所有 HTTP 请求交由路由器统一分发
      .requestHandler(router)
      // 绑定端口并启动监听
      .listen(8888)
      // 启动成功回调:打印实际监听端口
      .onSuccess(server -> {
        System.out.println("HTTP server started on port " + server.actualPort());
      })
      // 启动失败回调:打印异常堆栈信息
      .onFailure(throwable -> {
        throwable.printStackTrace();
      });
  }
}

上述代码首先创建了一个 Vert.x Web Router(用于将传入的 HTTP 请求按路由规则分发给特定处理器的路由对象),并在 8888 端口启动了一个 HTTP 服务器。每次收到请求时,服务都会返回一个包含客户端 IP 地址、查询参数 name 以及打招呼语句的 JSON 数据对象。

3编译与运行

要启动应用程序,打开终端并切换到项目根目录。 首先使用 Maven 对工程进行打包编译:

$ 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

服务启动就绪后,打开新终端窗口发起测试请求:

HTTPie
curl
$ http http://localhost:8888
HTTP/1.1 200 OK
content-length: 115
content-type: application/json; charset=utf-8
 
{
    "address": "0:0:0:0:0:0:0:1:32806",
    "message": "Hello unknown connected from 0:0:0:0:0:0:0:1:32806",
    "name": "unknown"
}
 
$ http http://localhost:8888\?name\="Francesco"
HTTP/1.1 200 OK
content-length: 119
content-type: application/json; charset=utf-8
 
{
    "address": "0:0:0:0:0:0:0:1:32822",
    "message": "Hello Francesco connected from 0:0:0:0:0:0:0:1:32822",
    "name": "Francesco"
}

4探索更多进阶主题

体验了 Vert.x 的简洁与高效之后,你可以通过以下核心指引继续深入探索: