使用 Vertx 部署后如何获取对已部署 Verticle 的引用?

How can I get a reference to my deployed verticle after deploying it with Vertx?

我有一个名为 TestService 的服务,它扩展了 AbstractVerticle:

public class TestService extends AbstractVerticle {
  @Override
  public void start() throws Exception {
    //Do things
  }
}

然后我像这样用 vertx 部署那个 verticle:

Vertx vertx = Vertx.vertx();
vertx.deployVerticle(TestService.class.getName());

在 vertx 实例化后,如何获取对已部署的 TestService 的引用?

您应该使用替代方法进行部署:

vertx.deployVerticle(TestService.class.getName(), deployment -> {
  if (deployment.succeeded()) {
    // here is your ID
    String deploymentId = deployment.result();
  } else {
    // deployment failed...
  }
});

如果您只想列出所有已部署的 Verticle,那么您可以只请求 ID 列表:

vertx.deploymentIDs()

我知道这个问题很老了,但是看到一个如何执行此操作的示例可能对某人有用。

您会经常看到这样的部署示例from vertx-examples
这遵循异步微服务框架,但是它真的很容易获得引用,因为方法 'deployVerticle'(参见 link 中的第 29 行)将采用一个实例,如下面的简单示例所示,您可以在回调中获取参考,如图所示。

Kotlin 中的示例很容易转换为 java

MyVert: io.vertx.core.AbstractVerticle() {  
    override fun start() {  
    // init  
     } 
    fun someFunction() {
    }
}  

fun main() {
 val vertx = Vertx.vertx()
 val myVert = MyVert()

 vertx.deployVerticle(myVert) {
    if(it.succeeded()  ) {
        myVert.someFunction()
    }
    else { println(it.cause().localizedMessage)}   }
}

通过这种方式可以获得当前vertx实例中所有部署的verticle

Set<String> strings = vertx.deploymentIDs();
strings
    .stream()
    .map(id -> ((VertxImpl)vertx.getDelegate()).getDeployment(id))
    .forEach(deployment -> System.out.println(deployment.verticleIdentifier() + " " + deployment.isChild() ));