[英]VertX3 verticle deployment: CompletionHandler not triggered
当我运行以下代码时:
import io.vertx.core.*;
import io.vertx.core.eventbus.MessageConsumer;
import io.vertx.core.json.JsonObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
class TestVerticle extends AbstractVerticle {
final Logger logger = LoggerFactory.getLogger(TestVerticle.class.getName());
public static final String ADDRESS = "oot.test";
public void start(Future<Void> startFuture) {
logger.info("starting test verticle");
MessageConsumer<JsonObject> consumer = vertx.eventBus().consumer(ADDRESS);
consumer.handler(message -> {
final JsonObject body = message.body();
logger.info("received: " + body);
JsonObject replyMessage = body.copy();
replyMessage.put("status", "processed");
message.reply(replyMessage);
});
logger.info("started test verticle");
}
}
public class Scratchpad {
private final static Logger logger = LoggerFactory.getLogger(Scratchpad.class);
public static void main(String[] args) throws InterruptedException {
Vertx vertx = Vertx.vertx();
logger.info("deploying test verticle");
Handler<AsyncResult<String>> completionHandler = result -> {
System.out.println("done");
if (result.succeeded()) {
logger.info("deployment result: " + result.result());
} else {
logger.error("failed to deploy: " + result);
}
};
TestVerticle testVerticle = new TestVerticle();
vertx.deployVerticle(testVerticle, completionHandler);
logger.info("deployment completed");
}
}
我希望执行CompletionHandler内容,因此我应该将某些内容发送到stdout(至少“已完成”,尽管日志记录也应该正常工作)但没有任何反应。 所有其他日志记录信息在我的屏幕上正确显示。 我究竟做错了什么?
后:
logger.info("started test verticle");
加:
startFuture.complete();
请参阅有关异步启动方法的文档的异步Verticle启动和停止部分:
此版本的方法将Future作为参数。 当方法返回时,不会将Verticle视为已部署。
一段时间之后,在你完成了你需要做的所有事情之后(比如启动其他的Verticle),你可以在Future上调用完成(或者失败)来表示你已经完成了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.