📝 关于Vert.x

Vert.x 是一个用于创建在 Java 虚拟机 (JVM) 上运行的反应式、非阻塞和异步应用程序的工具包。它包含多个可帮助您创建反应式应用程序的组件。它由Tim Fox于2011年创建,最初命名为Node.x,后来改名为Vert.x以避免法律问题。

主要特点

  1. 多语言支持:Vert.x支持多种编程语言,包括Java、JavaScript、Groovy、Ruby、Scala、Kotlin等。
  2. 事件驱动和非阻塞:Vert.x采用事件驱动和非阻塞的编程模型,使其能够高效处理大量并发请求。
  3. 模块化设计:Vert.x具有模块化设计,核心库非常小(约650kB),可以根据需要添加功能模块。
  4. 高性能:由于其异步非阻塞的特性,Vert.x在处理Web应用程序和微服务时表现出色。

使用场景

Vert.x非常适合用于构建轻量级、高性能的微服务、实时Web应用程序、大容量事件处理系统等

示例代码

package com.example.starter;

import io.vertx.core.AbstractVerticle;
import io.vertx.core.MultiMap;
import io.vertx.core.Promise;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.web.Router;

public class MainVerticle extends AbstractVerticle {

    @Override
    public void start(Promise<Void> startPromise) {
        // Create a Router
        Router router = Router.router(vertx);

        // Mount the handler for all incoming requests at every path and HTTP method
        router.route().handler(context -> {
            // Get the address of the request
            String address = context.request().connection().remoteAddress().toString();
            // Get the query parameter "name"
            MultiMap queryParams = context.queryParams();
            String name = queryParams.contains("name") ? queryParams.get("name") : "unknown";
            // Write a json response
            context.json(
                new JsonObject()
                    .put("name", name)
                    .put("address", address)
                    .put("message", "Hello " + name + " connected from " + address)
            );
        });
        // Create the HTTP server
        vertx.createHttpServer()
            // Handle every request using the router
            .requestHandler(router)
            // Start listening
            .listen(8888)
            // Print the port on success
            .onSuccess(server -> {
                System.out.println("HTTP server started on port " + server.actualPort());
                startPromise.complete();
            })
            // Print the problem on failure
            .onFailure(throwable -> {
                throwable.printStackTrace();
                startPromise.fail(throwable);
            });
    }
}

源码地址

项目构建

测试:

./mvnw clean test

打包:

./mvnw clean package

运行: