Vert.x的核心是一组被称为“Vert.x Core”的Java API。
Vert.x提供了以下功能:
核心中的功能都很底层,类似数据库访问,权限控制或者高级web功能在Vert.x ext(扩展)中提供。
Vert.x核心包很小很轻量,可以只使用所需要的部分,就完全集成到现有的项目中——并不强制要求应用满足指定的结构才能使用Vert.x
可以在任何Vert.x核心支持的语言立使用它。它自动为每种语言生成和Java API惯用的等价物。
后文中。core都指的是Vert.x core。
如果是使用Maven或者Gradle的项目,添加以下依赖即可使用Vert.x Core API:
pom.xml
中添加):<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-core</artifactId>
<version>${vert.x.version}</version>
</dependency>
build.gradle
文件中添加)dependencies {
compile 'io.vertx:vertx-core:3.5.3'
}
Vert.x的使用离不开Vertx对象,按如下方式创建一个Vertx实例:
Vertx vertx = Vertx.vertx();
注意:大多数应用只需要一个Vert.x实例,但是如果需要可以创建多个Vertx.x实例,例如需要隔离多个事件总线或者对不同的服务器和客户端分组。
创建Vertx时能够进行一些配置,例如:
Vertx vertx = Vertx.vertx(new VertxOptions().setWorkerPoolSize(40));
VertxOptions
对象有诸多选项以供配置,例如集群(clustering),高可用(high availability),池大小(pool sizes)等等。详见Javadoc。
创建Vert.x集群(参阅事件总线一章关于集群的内容)通常需要使用异步变量来创建Vertx对象。 为了把集群中的不同Vert.x实例组织在一起需要一些时间(可能有几秒钟)。为了不阻塞调用线程(the calling Thread),结果会以异步方式返回。
Vert.x支持流式API。 流式API指的是对多个方法的调用能被链式地写在一起,例如:
request.response().putHeader("Content-Type", "text/plain").write("some text").end();
这在Vert.x中很常见,但是不是强制使用,也可以这么写:
HttpServerResponse response = request.response();
response.putHeader("Content-Type", "text/plain");
response.write("some text");
response.end();
Vert.x 的API大部分是事件驱动(event driven)的。也就是说关注的事情发生后,Vert.x会发送事件(event)。 例如如下事件:
vertx.setPeriodic(1000, id -> {
// This handler will get called every second
System.out.println("timer fired!");
});
收到HTTP请求:
server.requestHandler(request -> {
// This handler will be called every time an HTTP request is received at the server
request.response().end("hello world!");
});
事件触发后,Vert.x会异步调用handler。
除了极少数例外(例如以'Sync'结尾的文件系统操作),所有Vert.x中的API都不会阻塞调用线程。 如果一个结果能被立即获得,它就会被立即返回,否则需要提供一个处理器(handler)来在稍后接受事件。 Vert.x API没有线程阻塞意味着少量线程就能处理大量并发。 传统的阻塞API线程阻塞通常发生在: