意外的Vertx部署实例行为

时间:2016-07-01 09:58:26

标签: java vert.x

我不明白为什么在成功部署Verticle后,此代码中的回调无法执行?

public class VertxApp{
public static void main(String[] args) {
    Vertx.vertx().deployVerticle(new MyVerticle(), res -> {
        System.out.println(res.result());
    });
}
}

MyVerticle类:

public class MyVerticle extends AbstractVerticle {
@Override
public void start(Future<Void> startFuture) {
    System.out.println("MyVerticle started!");
}

@Override
public void stop(Future stopFuture) throws Exception {
    System.out.println("MyVerticle stopped!");
}
}

1 个答案:

答案 0 :(得分:1)

您永远不会告诉Vert.x您已完成部署。 Vert.x使用MyVerticle.start(...)调用Future<Void> startFuture。完成初始化后,您需要调用startFuture.complete()。与MyVerticle.stop(...)相同。

class MyVerticle extends AbstractVerticle {
  @Override
  public void start(Future<Void> startFuture) {
    System.out.println("MyVerticle started!");
    startFuture.complete();
  }

  @Override
  public void stop(Future stopFuture) throws Exception {
    System.out.println("MyVerticle stopped!");
    stopFuture.complete();
  }
}

或者你可以像这样覆盖AbstractVerticle.start()(没有Future):

class MyVerticle2 extends AbstractVerticle {
  @Override
  public void start() {
    System.out.println("MyVerticle2 started!");
  }

  @Override
  public void stop() throws Exception {
    System.out.println("MyVerticle2 stopped!");
  }
}