文档地址: http://vertx.io/docs/vertx-core/java/
Verticles
verticles是一个很重要的概念。你可以将verticles当做是Actor Model(一种编程模型)中的actor。它是一段代码的集合—可以部署和被Vert.x运行。并且verticles能够被Vert.x支持的所有语言编写,并不仅限于java。一个应用可以包含不同语言编写的verticles。所有的verticles之间通过event bus进行交换数据。
Writing Verticles
所有编写的Verticle类都必须继承Verticle接口。为了方便,一般情况下我们可以继承AbstractVerticle。如下代码:
public class MyVerticle extends AbstractVerticle {
// Called when verticle is deployed
public void start() {
}
// Optional - called when verticle is undeployed
public void stop() {
}
}
当verticle部署运行时,会调用start方法;当start方法运行完后,就认为verticle已经启动。当verticle卸载时,会调用stop方法;当stop方法运行完成后,就认为verticle已经卸载。
Asynchronous Verticle start and stop
如果你需要在verticle的start方法中执行比较耗费时间的操作时,你不能为了等待其部署,而去阻塞。这样就违背了黄金原则。那么我们应该怎么做呢?
public class MyVerticle extends AbstractVerticle {
public void start(Future<Void> startFuture) {
// Now deploy some other verticle:
vertx.deployVerticle("com.foo.OtherVerticle", res -> {
if (res.succeeded()) {
startFuture.complete();
} else {
startFuture.fail();
}
});
}
}
如上代码所示,我们可以继承异步的start方法(多一个startFuture参数)。例子中展示的是我们在一个verticle的start方法中启动另一个verticle。
相对应的stop方法也有异步的实现,如下代码:
public class MyVerticle extends AbstractVerticle {
public void start() {
// Do something
}
public void stop(Future<Void> stopFuture) {
obj.doSomethingThatTakesTime(res -> {
if (res.succeeded()) {
stopFut