2016-07-01 64 views
0

我不明白爲什麼Verticle成功部署後此代碼中的回調不會執行?意外的Vertx部署實例行爲

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

你永遠不會告訴Vert.x你與部署完成。 Vert.xFuture<Void> startFuture呼叫您的MyVerticle.start(...)。完成初始化後,您需要撥打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!"); 
    } 
}