【问题标题】:Vertx - Stop a verticle instanceVertx - 停止一个verticle实例
【发布时间】:2018-03-07 09:57:37
【问题描述】:

我有这个顶点代码:

DeploymentOptions deploymentOptions=new DeploymentOptions();
deploymentOptions.setInstances(2);

我想知道如何停止或杀死一组实例中的一个实例。

谢谢。

【问题讨论】:

  • 你为什么要这样做?
  • 如果应用程序的可用 CPU 下降,应用程序可能会决定通过取消部署 Verticle 的某些实例来缩减规模

标签: vert.x instances


【解决方案1】:

如果您想缩小顶点,您需要部署一个新的集合,然后取消部署旧的集合。不过,这有点棘手:

final String[] myId = {""};
vertx.deployVerticle("my.Verticle", new DeploymentOptions().setInstances(2), (h) -> {
            if (h.succeeded()) {
                // This is deployment ID for both. Store it in some holder, because Java
                myId[0] = h.result();
            }
            else {
                System.out.println("CAUSE " + h.cause());
            }
});
// ...
// Here you decide to downscale
vertx.undeploy(myId[0], (h) -> { /* Deploy again with less instances */ });

在实际应用中,您可能希望首先部署一组新的verticle,然后在它们的完成处理程序中取消部署旧的。但为了清楚起见,我把这部分倒过来了。

【讨论】:

    【解决方案2】:

    据我所知,您不能只取消部署一个实例。成功部署您为其提供了 deploymentOptions 的 Verticle 后,您将收到一个 deploymentId。

        DeploymentOptions deploymentOptions = new DeploymentOptions();
        deploymentOptions.setInstances(3);            
        vertx.deployVerticle("com.example.MyVerticle", deploymentOptions, res -> {
                if (res.succeeded()) {
                    String deploymentId = res.result();
                    System.out.println("Deployment id is: " + deploymentId);
                    vertx.undeploy(deploymentId);
                } else {
                    System.out.println("Deployment failed!");
                }
            });
    

    因此,您只需选择一次取消部署您已收到 deploymentId 的所有 Verticle。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-08
      • 1970-01-01
      • 2020-12-01
      • 2014-09-14
      • 1970-01-01
      • 2016-03-19
      • 2021-03-02
      • 1970-01-01
      相关资源
      最近更新 更多