在Eclipse中停止vertx verticle

Die*_* TL 9 java eclipse vert.x vertx3

我正在关注Jenkov关于vertx 的教程.这里我有两个文件:

MyVerticle.java:

import io.vertx.core.AbstractVerticle;
import io.vertx.core.Future;

public class MyVerticle extends AbstractVerticle {

    @Override
    public void start(Future<Void> startFuture) {
        System.out.println("MyVerticle started!");
    }

    @Override
    public void stop(Future stopFuture) throws Exception {
        System.out.println("MyVerticle stopped!");
    }
}
Run Code Online (Sandbox Code Playgroud)

和VertxVerticleMain.java:

import io.vertx.core.Vertx;

public class VertxVerticleMain {

    public static void main(String[] args) {
        Vertx vertx = Vertx.vertx();

        vertx.deployVerticle(new MyVerticle());
    }
}
Run Code Online (Sandbox Code Playgroud)

运行后VertxVerticleMain.java,我看到了"MyVerticle started!"在Eclipse的控制台,但不知道该怎么称呼stopMyVerticle.

Jenkov说当Vert.x关闭并且您的Verticle需要停止时,会调用stop()方法.我究竟如何关闭Vert.x并停止此Verticle?我想MyVerticle stopped!在控制台中看到.

Ber*_*ver 12

Vert.x文档:

Vert.x calls this method when un-deploying the instance. You do not call it yourself. 
Run Code Online (Sandbox Code Playgroud)

如果从main方法运行Vert.x并终止JVM进程(例​​如,通过单击Eclipse中的"stop"按钮),Vert.x可能不会发出取消部署Verticle的信号,或者JVM在Vert之前终止.x有时间取消部署Verticle.

您可以执行许多操作以确保将取消部署Verticle并调用stop()方法:

  1. 使用vertx命令行启动Verticle.当您停止该过程(或告诉vert.x停止)时,Vert.x将确保取消部署所有Verticle.
  2. 您可以通过获取deploymentId的列表并为所有id调用undeploy以编程方式取消部署已部署的Verticle:

    vertx.deploymentIDs().forEach(vertx::undeploy);
    
    Run Code Online (Sandbox Code Playgroud)
  3. 您可以通过编程方式告诉Vert.x停止:

    vertx.close();
    
    Run Code Online (Sandbox Code Playgroud)
  4. 您可以添加一个关闭挂钩,以确保在JVM终止上执行上述选项之一:

    Runtime.getRuntime().addShutdownHook(new Thread() {
        public void run() {
            vertx.close();
        }
    });
    
    Run Code Online (Sandbox Code Playgroud)

您可以通过调用Vert.x API以编程方式取消部署Verticle,或者只是停止Java进程,该进程在术语中触发Vert.x进程停止.

顺便说一句,值得问一下自己是否真的有必要在运行Verticle的进程停止时始终调用stop()方法.你永远无法确定是否会发生这种情况; 当进程被强制停止或终止时,可能不会调用stop()方法.