Java Vert.x未来处理程序设置
请查看位于类扩展Java Vert.x未来处理程序设置,java,vert.x,Java,Vert.x,请查看位于类扩展AbstractVerticle中的以下代码: @Override public void start(Future<Void> serverStartFuture) throws Exception { log.info("Deploying " + this.getClass().toString() + " verticle..."); //TODO: Handler is not calling. serverStartFuture
AbstractVerticle
中的以下代码:
@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());
}
});
}
为什么在我的例子中从未调用过serverStartFuture.setHandler
?
我这样理解这个概念:
- 创建未来
f
- 设置未来处理程序
- 算了吧
- 代码集中的其他地方
到f
/完成
失败
- 设置
result后,处理程序将调用f
我做错什么了吗?您不应该设置
serverStartFuture
处理程序。当垂直体展开时,它由Vert.x设置。当你的垂直运动成功开始时,你应该完成未来,否则就失败了
请参阅Vert.x core文档。我在日志中看到“信息:部署类[classname]垂直成功”。您能为您显示日志中出现的内容以及您希望看到的内容吗?哦,我明白了,但我知道传递给启动方法的
future
是唯一一个不能以这种方式工作的方法。
private Future<Void> initHttpServ(){
Future<Void> httpServerFuture = Future.future();
httpServerFuture.complete();
return httpServerFuture;
}