我有两个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)
任何人都知道如何做到这一点? 谢谢:))
答案 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.