当前位置: 首页 > 知识库问答 >
问题:

在Eclipse中停止vertx顶点

汤弘文
2023-03-14

我正在关注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!");
    }
}

和VertxVerticleMain。爪哇:

import io.vertx.core.Vertx;

public class VertxVerticleMain {

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

        vertx.deployVerticle(new MyVerticle());
    }
}

运行VertxVerticleMain后。java,我看到“MyVerticle启动了!”在Eclipse的控制台中,但不知道如何在MyVerticle中调用stop

Jenkov说,当Vert. x关闭并且你的顶点需要停止时,会调用Stop()方法。我如何关闭我的Vert. x并停止这个顶点?我想看到我的版本停止!在控制台中。

共有2个答案

孙才捷
2023-03-14

你的代码应该添加super。停下来,超级棒。start()函数如下:

public class MyVerticle extends AbstractVerticle {

    @Override
    public void start(Future<Void> startFuture) {
        //must call super.start() or call startFuture.complete()
        super.start(startFuture); 
        System.out.println("MyVerticle started!");
        System.out.println("Verticle_stopFuture.start(): deployId=" + context.deploymentID());
    }

    @Override
    public void stop(Future stopFuture) throws Exception {
        //must call super.stop() or call stopFuture.complete()
        super.stop(stopFuture);
        System.out.println("MyVerticle stopped!");
    }
}

和VertxVerticleMain。爪哇:

public class VertxVerticleMain {
    static String verticle_deployId;

    public static void main(String[] args) throws InterruptedException {
        System.out.println("start main(): thread="+Thread.currentThread().getId());


        Vertx vertx = Vertx.vertx();

        vertx.deployVerticle(new MyVerticle(), new Handler<AsyncResult<String>>(){

            @Override
            public void handle(AsyncResult<String> asyncResult) {

                if (asyncResult.succeeded()) { // khi startFuture.complete() đc gọi
                    System.out.println("asyncResult = DeployId =" + asyncResult.result());

                    verticle_deployId = asyncResult.result();
                } else { //khi startFuture.fail() đc gọi
                    System.out.println("Deployment failed!");  //vì chưa đc cấp id
                }
            }
        });

        // waiting for Verticle context is allocate by Vertx
        Thread.currentThread().sleep(500);

        Set<String> deploymentIDs = vertx.deploymentIDs();
        System.out.println("==============  (sleeped 500ms wait for Context allocated), list of deploymentIDs: number Deployments =" + deploymentIDs.size());
        for(String depId: deploymentIDs){
            //
            System.out.println(depId);
        }

        //close verticle here
        vertx.undeploy(verticle_deployId);


    }

}
胡国兴
2023-03-14

从垂直方向。x文档:

Vert.x calls this method when un-deploying the instance. You do not call it yourself. 

如果你跑Vert。从主方法中选择x,然后终止JVM进程(例如,通过在Eclipse中单击“停止”按钮),Vert。x可能没有被通知取消部署Verticle,或者JVM在Vert之前终止。x有时间解除垂直线的部署

您可以做很多事情来确保verticle将被取消部署,并且stop()方法将被调用:

>

vertx.deploymentIDs().forEach(vertx::undeploy);

你可以通过编程告诉Vert。要停止:

vertx.close();

您可以添加一个关闭钩子来确保上面的选项之一在JVM终止时执行:

Runtime.getRuntime().addShutdownHook(new Thread() {
    public void run() {
        vertx.close();
    }
});

您可以通过调用Vert以编程方式取消垂直部署。或者直接停止Java进程,这在术语上会触发Vert。x进程停止。

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

 类似资料:
  • 我有以下vertx代码: 我想知道如何停止或杀死集合实例中的一个实例。 谢了。

  • 我有一个创建处理程序,其中包含这样的验证方法: 在validate方法中,我检查输入,如果输入无效,我将其写入响应: 问题是,如果输入无效,我希望处理程序结束。但发生的情况是,如果输入无效,它会设置statusCode并写入响应,然后它继续创建方法中的流程,当它运行最后一行时,它想再次写入响应并抛出异常。我想在输入无效时结束或中止请求。我该怎么做? }

  • 问题内容: 我的浏览器在ajax请求后滚动到顶部,然后我使用 滚动回到我的div。有没有一种方法可以阻止它从一开始就滚动到顶部 问题答案: 您应该将其添加到ajax调用函数的末尾。或至内联通话结束:

  • 问题内容: 我正在尝试拍摄JUnit。在源代码中,我在两个位置设置了断点:1)在初始化静态成员的行中2)在一个测试用例的第一行中。 调试器在静态字段初始化行中停止。但这并不会在测试用例中停止。无论我在测试用例中的何处设置断点,调试器都不会在那里停下来。我肯定知道测试用例已执行,因为我可以看到添加的日志消息出现在日志中。 任何帮助将不胜感激。 我正在使用Eclipse Galileo和JUnit4启

  • 我有一个小的vertx应用程序。一个超文本传输协议垂直获取一个请求,并通过带有请求-响应模式的eventbus发送它。所以类似于: 在DB Vertical中,我使用消费者获取一条消息,发送到DB,进行一些更改并发送回HTTP verticle。我的问题是,我有一个必须进行大量检查的删除操作,所以这个过程可能需要10秒钟。此时HTTP verticle仍然可以获得一些新请求,但DB consume

  • 问题内容: 在这里,我尝试了简单的服务程序。启动服务可以正常工作并生成Toast,但停止服务则不能。此简单服务的代码如下: 调用此服务的活动的代码如下: 使用该停止按钮帮助我停止服务,该按钮在onDestroy()方法中生成吐司。我已经在这里看到了很多有关停止服务问题的帖子,但并不令人满意,因此发布了新问题。希望得到满意的答复。 问题答案: 是错误的名字 您是否仅在此问题或代码中犯了错误?