Vertx 3:取消部署在不同JVM实例

时间:2016-09-30 07:14:40

标签: java cmd jvm vert.x

我有两个Verticle说" A"和" B"。两者都在不同的JVM实例中运行。 现在,A向B&#34发送消息;操作成功。你可以自己取消部署"。当B收到此消息时,它应该取消部署。

我尝试了两个选项: 1. vertx.close();    (a)如果在不同的命令提示符下打开Verticle B.    (b)如果Verticle B未在不同的命令提示符下打开。 2. vertx.undeploy(deploymentID(),); Verticle B作为不同的cmd提示以及同一cmd提示打开(一个Verticle cmd提示符......在后台运行)

在1->(a)中,Verticle B已关闭,但cmd提示仍处于打开状态。 在1->(b)中,Verticle B未关闭且JVM也在运行。 在第二种情况下,我收到以下错误消息:

java.lang.IllegalStateException: Unknown deployment
        at io.vertx.core.impl.DeploymentManager.undeployVerticle(DeploymentManager.java:203)
        at io.vertx.core.impl.VertxImpl.undeploy(VertxImpl.java:587)
        at x.y.z.AVerticle.lambda$null$1(AVerticle.java:118)
        at io.vertx.core.eventbus.impl.EventBusImpl.lambda$convertHandler$1(EventBusImpl.java:334)
        at io.vertx.core.eventbus.impl.HandlerRegistration.deliver(HandlerRegistration.java:213)
        at io.vertx.core.eventbus.impl.HandlerRegistration.handle(HandlerRegistration.java:192)
        at io.vertx.core.eventbus.impl.EventBusImpl.lambda$deliverToHandler$3(EventBusImpl.java:503)
        at io.vertx.core.impl.ContextImpl.lambda$wrapTask$3(ContextImpl.java:359)
        at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:339)
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:393)
        at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:742)
        at java.lang.Thread.run(Unknown Source)

任何人都知道如何做到这一点? 谢谢:))

1 个答案:

答案 0 :(得分:2)

我为一个类似的案例做了一个例子,其中要求是取消部署然后终止jvm。

https://github.com/floriankammermann/vertx-examples/tree/master/self-terminating 您也可以使用此代码。您只需删除https://github.com/floriankammermann/vertx-examples/blob/master/self-terminating/src/main/java/org/swisspush/vertx/examples/SelfTerminated.java

中的System.exit(0);即可

这里的限制是,您已经以编程方式部署了Verticle。

在您的情况下,必须通过分布式事件总线连接Verticle A和B(可以相互发送消息)。在您的情况下,垂直doSomething.js是Verticle B.垂直A的部署位置无关紧要。 Verticle A必须做的唯一事情是将消息发送/发布到“已完成”的地址。这将取消部署Verticle B.