2017-08-22 2 views
0

Bitte schauen Sie auf folgende Stück Code in der Klasse befindet sich erstreckenden AbstractVerticle:Vert.x Zukunft Handler Einstellung

@Override 
public void start(Future<Void> serverStartFuture) throws Exception { 

    log.info("Deploying " + this.getClass().toString() + " verticle..."); 

    //TODO: Handler is not calling. 
    serverStartFuture.setHandler(event -> { 
     if(event.succeeded()){ 
      log.info("Deploying " + this.getClass().toString() + " verticle SUCCESS"); 
     } else if (event.failed()){ 
      log.error("Deploying " + this.getClass().toString() + " verticle FAIL:"); 
      log.error(event.cause()); 
     } 
    }); 

    /* To follow future compose pattern in future */ 
    Future<Void> initSteps = this.initHttpServ(); 
    initSteps.setHandler((AsyncResult<Void> asyncResult) -> { 
     if(asyncResult.succeeded()){ 
      serverStartFuture.complete(); 
     }else if(asyncResult.failed()){ 
      serverStartFuture.fail(asyncResult.cause()); 
     } 
    }); 

} 

Unter der Annahme, dass initHttpServ immer vollständig Zukunft zurück:

private Future<Void> initHttpServ(){ 
    Future<Void> httpServerFuture = Future.future(); 
    httpServerFuture.complete(); 
    return httpServerFuture; 
} 

Warum die serverStartFuture.setHandler ist nie in meinem Fall genannt? verstehe ich das Konzept, dass Art und Weise:

  • Zukunft erstellen f
  • gesetzt f Zukunft Handler
  • darüber
  • Irgendwo anders in Code vergessen gesetzt f-complete/fail
  • Nach der Einstellung f Ergebnis , Handler ruft

Aber mein Stück Code scheint diesen Ansatz zu negieren. Mache ich etwas falsch?

+0

Ich sehe "INFO: Klasse [Classname] verticle SUCCESS implementieren" in den Protokollen. Können Sie zeigen, was in den Protokollen für Sie angezeigt wird und was Sie erwarten? –

Antwort

1

Sie sollten den serverStartFuture Handler nicht festlegen. Es wird von Vert.x festgelegt, wenn das vertikale Element bereitgestellt wird. Sie sollten entweder die Zukunft abschließen, wenn Ihr Vektor erfolgreich startet, oder andernfalls fehlschlagen.

Siehe Asynchronous Verticle start and stop in der Kerndokumentation von Vert.x.

+0

Oh, ich verstehe, als ich verstehe, dass "Zukunft" zu starten Methode ist die einzige, die so nicht funktionieren würde. – Tomas