java - VertX 垂直部署 : CompletionHandler not triggered

标签 java vert.x

当我运行以下代码时:

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 内容被执行,因此我应该将一些东西发送到标准输出(至少“完成”,尽管日志记录也应该正常工作)但没有任何反应。所有其他日志记录信息都正确显示在我的屏幕上。我做错了什么?

最佳答案

之后:

logger.info("started test verticle");

添加:

startFuture.complete();

参见 Asynchronous Verticle start and stop关于异步启动方法的文档部分:

This version of the method takes a Future as a parameter. When the method returns the verticle will not be considered deployed.

Some time later, after you've done everything you need to do (e.g. start other verticles), you can call complete on the Future (or fail) to signal that you're done.

关于java - VertX 垂直部署 : CompletionHandler not triggered,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40364628/

相关文章:

promise - Vert.x 3.8.1+ 中 CompositeFuture 的 Promise 等价物是什么?

java - 在范围、生命周期方面有什么区别吗?

Java:(错误?)SonarQube 6.7.1 LTS 中的 S2637 为阳性

Java 集成测试无可运行方法错误 - Spring Runner

java - Maven/IntelliJ导入错误: io. vertx.core不存在

java - Vertx3 - EventBus 在集群中不工作

java - Vert.x 如何将消息从 REST 传递/获取到消息总线?

java - 显示源代码的 appengine java 开发服务器

java - 服务器向浏览器发送 html 但不发送图像 HTTP

java - 从 Vert.x 发起多个出站调用