2016-07-01 2 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.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!"); 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^