框架Vert.x学习

基础

vert.x Web

依赖
<dependency>
  <groupId>io.vertx</groupId>
  <artifactId>vertx-web</artifactId>
  <version>3.4.2</version>
</dependency>

概述

🍇 Vert.x

本质:
基于 Netty 的异步非阻塞框架,属于「反应式编程」(Reactive Programming)范畴,不仅限于 Web 开发,还支持网络编程、事件驱动等多种场景。
核心特性:
异步非阻塞 I/O,通过事件循环(Event Loop)模型处理高并发请求,资源消耗低,适合高吞吐量场景。
多语言支持(JavaKotlinJavaScript 等),但在 Java 生态中应用广泛。
轻量级,模块化设计,可按需引入组件(如 Web 路由、数据库客户端等)。
无侵入式,不强制依赖特定注解或配置,代码更灵活。
适用场景:
高并发 API 服务、实时通信(如 WebSocket)、微服务架构中的轻量级服务等。

🍇 Router Route RoutingContext

RouterVert.x Web 的核心概念之一。它是一个维护了零或多个 Route 的对象。
Router 接收 HTTP 请求,并查找首个匹配该请求的 Route,然后将请求传递给这个 RouteRoute 可以持有一个与之关联的处理器用于接收请求,通过这个处理器对请求做一些事情,然后结束响应或者把请求传递给下一个匹配的处理器。

RoutingContext表示路由上下文,包含了 HTTP 请求和响应的所有信息。

🍇 注意

Vert.x 的 Web 框架通过显式的路由配置来关联请求路径和处理器(Handler<RoutingContext>)。
显示配置方式:
代码注册(如router.get("/path").handler(handler))
配置文件(如handler-mappings)
vertx:
  handler-mappings:
    - path: /api
      method: GET
      beanNames: netidHandler
    - path: /api
      method: POST
      beanNames: netidHandler

RoutingContext

RoutingContext ctx;
ctx.next();
// 是上下文对象中用于控制中间件流程的函数,调用它会将控制权交给下一个中间件或路由处理器。如果不调用next(),流程会在当前中间件中断,后续逻辑不会执行。

核心类

Promise 和 Future

🍇 Promise 异步操作对象
Promise webResult= Promise.promise();
// 创建一个新的 Promise 对象;
// Promise 代表一个尚未完成但预计将来会完成的异步操作;
// 是异步操作的 "承诺者",用于管理异步操作的结果(成功 / 失败),并将结果传递给对应的Future
webResult.complete((Object)xxx);
// 将异步操作的结果respBody传递给 Promise,并标记这个 Promise 为已完成状态

🍇 Future
Future<JsonObject> codeResultFuture = webResult.future();
// 获取与该Promise绑定的Future对象
codeResultFuture.onSuccess();
// Future 注册 "成功回调" 的方法。
// 当异步操作成功完成并返回结果时,onSuccess 注册的回调函数会被触发,通常可以在回调中处理返回的 JsonObject 数据。
codeResultFuture.onFailure();
// Future 注册 "失败回调" 的方法。
// 当异步操作失败(如网络错误、异常抛出等)时,onFailure 注册的回调函数会被触发,通常可以在回调中处理错误信息。

Pair和Triple

org.apache.commons.lang3 提供了返回多个值的工具类,返回2个值用Pair3个值用Triple;
cn.hutool.core.lang包中也提供了关于Pair的工具包;

🍇 Pair
org.apache.commons.math3.util.Pair,是Pair<K, V>键值对的形式,提供的方法主要是getKey()getValue()
创建Pair对象:
Pair<Boolean,String> pair = new Pair<>(true,"test");

org.apache.commons.lang3.tuple.Pair,是抽象类,提供Pair<L, R>左边与右边的形式的工具类,获取值的方法有getKey(), getValue(),getLeft(),getRight(); // 使用的是这个类
创建Pair对象:
Pair<Boolean,String> pair = new ImmutablePair<>(true,"test");
Pair.of(true, "test");

cn.hutool.core.lang.Pair,是Pair<K, V>键值对的形式,提供的方法主要是getKey()getValue()
创建Pair对象
Pair<Boolean,String> pair = new Pair<>(true,"test");

🍇 Triple
org.apache.commons.lang3.tuple.Triple,是一个抽象类,以Triple<L, M, R>的形式返回三个参数;
创建Triple对象
Triple triple = new ImmutableTriple("test", 11,"sex");

实战

### 创建首个Vert.x应用 #### 准备工作 在开始之前,确保你的开发环境已经安装了Java Development Kit (JDK) 和 Maven。Vert.x 是基于Java的框架,因此需要JDK来编译和运行程序。Maven则用于项目管理和依赖管理。 #### 初始化项目 首先,创建一个新的Maven项目,并在`pom.xml`中添加Vert.x的依赖: ```xml <dependencies> <dependency> <groupId>io.vertx</groupId> <artifactId>vertx-core</artifactId> <version>4.3.0</version> <!-- 请使用最新版本 --> </dependency> </dependencies> ``` #### 编写第一个Verticle 接下来,我们将编写一个简单的Verticle,这是Vert.x中的基本单元。创建一个名为`MyFirstVerticle.java`的文件,并实现`Verticle`接口: ```java import io.vertx.core.AbstractVerticle; import io.vertx.core.Vertx; public class MyFirstVerticle extends AbstractVerticle { @Override public void start() { // 创建HTTP服务器 vertx.createHttpServer().requestHandler(req -> { req.response() .putHeader("content-type", "text/plain") .end("Hello from Vert.x!"); }).listen(8080); System.out.println("HTTP server started on port 8080"); } public static void main(String[] args) { Vertx vertx = Vertx.vertx(); vertx.deployVerticle(new MyFirstVerticle()); } } ``` #### 部署Verticle 上面的代码中,我们在`main`方法里创建了一个`Vertx`实例,并调用了`deployVerticle`方法来部署我们的Verticle。这会启动一个HTTP服务器监听8080端口,并对所有请求返回"Hello from Vert.x!"[^1]。 #### 使用事件总线 除了HTTP服务外,Vert.x还提供了强大的事件总线功能,允许不同部分的应用通过消息传递进行通信。下面是如何使用事件总线发送和接收消息的例子: ```java // 发送消息到事件总线 vertx.eventBus().send("my.address", "Hello!"); // 注册处理器以接收来自特定地址的消息 vertx.eventBus().consumer("my.address", message -> { System.out.println("Received message: " + message.body()); }); ``` #### 打包与运行 完成开发后,你可以将应用打包成JAR文件以便于分发。如果使用Maven,可以配置`maven-jar-plugin`来生成可执行JAR。之后,只需运行以下命令即可启动你的Vert.x应用: ```bash java -jar your-application.jar ``` 由于Vert.x Core本身只是一个普通的JAR库,所以它可以嵌入到应用程序内部,无论这些应用是打包为一组JAR、一个包含所有依赖的单独的JAR、或者即使被部署到流行的组件和应用容器[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值