当我运行以下代码时:
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 (至少“已完成”,尽管日志记录也应该正常工作),但什么也没有发生。所有其他日志信息都正确地显示在我的屏幕上。我做错了什么?
发布于 2016-11-03 14:56:24
之后:
logger.info("started test verticle");添加:
startFuture.complete();请参阅关于异步启动方法的文档的异步垂直线启动和停止部分。
该方法的此版本以未来作为参数。当方法返回时,将不考虑部署垂直线。 过了一段时间,当你做完所有你需要做的事情后(例如,开始其他眩晕),你就可以在未来(或失败)上打电话来表示你已经完成了。
https://stackoverflow.com/questions/40364628
复制相似问题