Vertx.deployVerticle不会调用提供的完成处理程序

时间:2017-11-01 19:13:35

标签: vert.x vertx-verticle

我编写了一个服务,其中已部署的Verticle链接到rest端点。该服务正在100%工作(我动态部署Verticle并调用REST端点在Verticle上执行一个函数)。问题是永远不会调用提供的完成处理程序。有什么想法吗?

以下是我的代码:

        LOGGER.debug(String.format("Starting runner %s:%s:%s" ,functionName, faasFunctionClass, fileName));

        DeploymentOptions deploymentOptions = new DeploymentOptions();
        deploymentOptions.setInstances(1);
        JsonObject jsonObject = new JsonObject();
        jsonObject.put(FUNCTION_NAME, functionName);
        jsonObject.put(FUNCTION_CLASS, faasFunctionClass);
        jsonObject.put(FUNCTION_FILENAME, fileName);

        deploymentOptions.setConfig(jsonObject);

        LOGGER.debug(String.format("Deploying [%s]" ,jsonObject.encode()));
        this.vertx.deployVerticle("faas:" + VertxFaasRunner.class.getCanonicalName(),deploymentOptions, event->{
            if (event.succeeded()) {
                System.out.println("Deployment id is: " + event.result());
            } else {
                System.out.println("Deployment failed!");
            }
        });

1 个答案:

答案 0 :(得分:2)

在这种情况下,它取决于您如何实现Verticle。

执行future.complete()时,在下面的代码中

只有event.succeeded()才为真。

public class MainVerticle extends AbstractVerticle {

    @Override
    public void start() throws Exception {
        System.out.println("[Main] Running in " + Thread.currentThread().getName());
        vertx
                .deployVerticle("io.vertx.example.core.verticle.worker.WorkerVerticle",
                        new DeploymentOptions().setWorker(true), event -> {
                            if (event.succeeded()) {
                                System.out.println("Deployment id is: " + event.result());
                            } else {
                                System.out.println("Deployment failed!");
                            }
                        });

    }
}

 public class WorkerVerticle extends AbstractVerticle {
  @Override
  public void start(Future future) throws Exception {
    System.out.println("[Worker] Starting in " + Thread.currentThread().getName());

    vertx.eventBus().<String>consumer("sample.data", message -> {
      System.out.println("[Worker] Consuming data in " + Thread.currentThread().getName());
      String body = message.body();
      message.reply(body.toUpperCase());
    });
    // this notifies that the verticle is deployed successfully.
    future.complete();
  }
 }