我正在关注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并停止这个顶点?我想看到我的版本停止!
在控制台中。
你的代码应该添加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);
}
}
从垂直方向。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()方法中生成吐司。我已经在这里看到了很多有关停止服务问题的帖子,但并不令人满意,因此发布了新问题。希望得到满意的答复。 问题答案: 是错误的名字 您是否仅在此问题或代码中犯了错误?