Java并非Spring不可之 - Vert.x小试牛刀

后端 · 2021-06-05

简介

Vert.x 是JVM上构建 响应式 应用的工具。 响应式应用既可以随着工作负载的增长而 扩展 ,又可以在出现故障时 弹性回复 。 响应式应用是 即时响应 的,因为它能有效利用系统资源并保护自身免受错误影响,从而使延迟可控。

Vert.x 背靠庞大的响应式模块生态系统,具有编写现代服务所需的一切:全面的Web技术栈,响应式数据库驱动程序、消息队列、事件流、集群支持、指标监控、分布式跟踪等等。

Vert.x 是工具包,而不是暗含黑魔法的框架:所写即所得,就这么简单。

特点

  • 更高的资源利用率:与基于阻塞I/O的传统技术栈和框架相比,可以用更少的资源处理更多请求。 Vert.x非常适合各种执行环境,包括虚拟机和容器等受限环境。不再浪费资源,增加部署密度、节省开支!
  • 并发与异步:致力于让 Vert.x 编程的体验变得更轻松,同时又不牺牲正确性和性能。可以选择最适合手头任务的模型:回调、Promise、Fu­ture,响应式编程(Re­ac­tive),以及(Kotlin)协程。
  • 灵活性:Vert.x 是一个工具包,而不是框架,因此自然很容易组合和嵌入现有应用程序。 Vert.x 对应用程序架构没有强制要求。选择所需的模块和客户端,然后在编写应用程序时将它们组合在一起。 Vert.x 可以根据需求进行调整和扩展。

环境

  • JDK 1.8 或更高版本
  • 文本编辑器或 IDE
  • Maven 3 或更高版本
  • curl 或 HTTPie ,或浏览器,用于执行 HTTP 请求

起步

打开 start.vertx.io 网页创建一个新项目。
2024-05-29T06:54:56.png
选择所需的 Vert.x 版本,Lan­guage 选择 Java,Build 选择 Maven, 然后输入 GroupId 和 Ar­ti­fac­tId。然后在 “De­pen­den­cies” 文本框输入 Vert.x Web 并将其选择添加为依赖。选择完成后,点击 Gen­er­ate Project 按钮。 将zip文件保存到电脑,最后解压到任意目录。

以上步骤生成的项目包括:

  • Maven 构建配置文件 pom.xml ,已配置如何构建、运行 Vert.x 程序
  • Ver­ti­cle 示例,及对应的 JUnit5 单元测试
  • 指定了代码样式的 Ed­i­tor­Con­fig 插件配置
  • Git 的忽略文件配置(.git­ig­nore)

编码

打开 src/main/java/com/example/starter/MainVerticle.java 文件。 源码中包含一个示例 Verticle (Vert.x 的最小部署单元),该 Vet­i­cle 启动一个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,所写即所得! 忘掉那些“最佳实践”,回到简单的设计中,享受编写易读代码的快乐。

Java Vert.x
Theme Jasmine by Kent Liao