Vert.x是一个事件驱动的JVM上的框架,可以帮助我们构建现代、灵活、可扩展的程序。Vert.x有多种语言的版本,可以用在Java、Kotlin、Scala、Groovy、Ruby等语言上。当然现在讨论的是如何在Java上使用Vert.x。
Vert.x是一个比较大的框架,包含了各个方面的功能。所以我决定写几篇文章,分别来介绍这些功能。所以今天先来看看Vert.x最核心的一些功能吧,这些功能都在vertx-core包下。官方的英文文档在这里,本文参考和引用了Vertx官方文档上的一些内容,如果需要详细信息请直接看官方文档。当然我又发现了志愿者翻译的中文文档,质量也可以,只不过版本稍微落后一些。
Vert.x核心库包含了以下一些功能,它们都是比较底层的功能,开发者可以根据需要使用。当然由于Vert.x的功能很多,所以这里我不打算全部介绍,只准备介绍一些比较常用的功能。如果想了解全部功能的话,还是请参考官方文档。
- TCP客户端和服务端
- HTTP客户端和服务端以及WebSockets支持
- 事件总线
- 共享数据,包括本地maps以及分布式聚簇maps
- 周期性和延迟操作
- 数据报
- DNS客户端
- 文件系统访问
- 高可用性
- 聚簇
Vert.x的特点是事件驱动、流式编程和非阻塞,这些特点将会在后面逐一介绍。
引入依赖
如果使用Maven的话,在pom.xml
中添加以下一段即可。
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-core</artifactId>
<version>3.4.2</version>
</dependency>
如果使用Gradle的话,在build.gradle
中添加以下一段。
dependencies {
compile 'io.vertx:vertx-core:3.4.2'
}
开始使用
创建Vertx对象
要使用Vertx的第一步就是创建Vertx对象,所有API都要通过这个对象来调用。一般情况下,一个程序只需要一个Vertx对象即可,不过有时候为了程序隔离等原因,我们会需要多个Vertx对象。创建Vertx对象很简单,调用下面一行代码即可。
Vertx vertx = Vertx.vertx();
有时候可能需要对Vertx进行一些配置,可以通过添加程序参数来实现。
VertxOptions options = new VertxOptions();
options.setWorkerPoolSize(20);
Vertx vertx2 = Vertx.vertx(options);
Verticles
Verticles是Vertx中的一个模型,可以帮助我们封装代码。Verticles是一个可选的模型,所以即使我们不使用Verticles,也可以继续使用Vertx。Verticles说起来很简单,就是一个接口。当然实际情况下,一般都是继承AbstractVerticle
抽象类。
public abstract class AbstractVerticle implements Verticle {
protected Vertx vertx;
protected Context context;
@Override
public Vertx getVertx() {
return vertx;
}
@Override
public void init(Vertx vertx, Context context) {
this.vertx = vertx;
this.context = context;
}
public String deploymentID() {
return context.deploymentID();
}
public JsonObject config() {
return context.config();
}
public List<String> processArgs() {
return context.processArgs();
}
@Override
public void start(Future<Void> startFuture) throws Exception {
start();
startFuture.complete();
}
@Override
public void stop(Future<Void> stopFuture) throws Exception {
stop();
stopFuture.complete();
}
public void start() throws Exception {