Java 如何以编程方式停止Vert.x垂直体?

Java 如何以编程方式停止Vert.x垂直体?,java,vert.x,vertx-verticle,Java,Vert.x,Vertx Verticle,假设我有一个类似这样的竖线(有意简化以便于解释我的问题) 对Vert.x有更多经验的人知道如何做到这一点吗?或者有人给我一些建议,告诉我什么是正确的替代方法?让我们将其分为两部分: 如何取消垂直部署 如何在业务逻辑和VertX之间进行通信 下面是一个垂直体在5秒后自行解除部署的示例 class StoppingVerticle extends AbstractVerticle { @Override public void start() { System.o

假设我有一个类似这样的竖线(有意简化以便于解释我的问题)


对Vert.x有更多经验的人知道如何做到这一点吗?或者有人给我一些建议,告诉我什么是正确的替代方法?

让我们将其分为两部分:

  • 如何取消垂直部署
  • 如何在业务逻辑和VertX之间进行通信
  • 下面是一个垂直体在5秒后自行解除部署的示例

    class StoppingVerticle extends AbstractVerticle {
    
        @Override
        public void start() {
    
            System.out.println("Starting");
            vertx.setTimer(TimeUnit.SECONDS.toMillis(5), (h) -> {
                vertx.undeploy(deploymentID());
            });
        }
    
        @Override
        public void stop() {
            System.out.println("Stopping");
        }
    }
    
    您只需使用垂直标识符调用
    undeploy()
    deploymentID()

    现在,您肯定不想将VertX实例传递给您的服务。
    相反,您可以使用以下接口:

    interface UndeployableVerticle {
        void undeploy();
    }
    
    您实施并传递给您的服务:

    public class ServiceVerticle extends AbstractVerticle implements UndeployableVerticle  {
    
       private MyService myService = new MyService(this);
    
       ...
    }
    
    那么就这样称呼它:

    public void onEvent(Event event) {
       this.verticle.undeploy();
    }
    
    public class ServiceVerticle extends AbstractVerticle implements UndeployableVerticle  {
    
       private MyService myService = new MyService(this);
    
       ...
    }
    
    public void onEvent(Event event) {
       this.verticle.undeploy();
    }