2016-09-30 6 views
1

"A"と "B"という2つの頂点があります。どちらも異なるJVMインスタンスで実行されています。 これで、AはBに「操作は成功しました。自分自身を展開できます」というメッセージを送信します。 Bがこのメッセージを受け取ると、それ自体はアンデプロイされます。Vertx 3:異なるJVMインスタンスで実行されている頂点のアンデプロイ

私は2つのオプションを試しました: 1. vertx.close(); (a)Verticle Bが別のコマンドプロンプトで開かれている場合。 (b)Verticle Bが別のコマンドプロンプトで開かれていない場合。 2. vertx.undeploy(deploymentID()、); Verticle Bは別のcmdプロンプトとしても、同じcmdプロンプトとしても開かれます(A Verticle cmdプロンプトはバックグラウンドで実行されます)

1 - >(a)では、Verticle Bは閉じていますが、 。 1 - >(b)では、Verticle Bは閉じず、JVMも実行しています。第2のケースで は、私は、エラーメッセージの下になった:

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

これの背後にあるユースケースは不明です。イベントバスからメッセージを受信すると、単に頂点を無効にすることができます。ステータスのブール値フィールド。 – tsegismont

答えて

2

jvmをアンデプロイして終了する必要があるという同様のケースを例にして説明しました。

https://github.com/floriankammermann/vertx-examples/tree/master/self-terminating このコードも使用できます。 System.exit(0);を削除するだけで済みますhttps://github.com/floriankammermann/vertx-examples/blob/master/self-terminating/src/main/java/org/swisspush/vertx/examples/SelfTerminated.java

ここでの制限事項は、プログラムでもプログラムを展開するということです。

分散イベントバスを介して、頂点AとBを接続する必要があります(お互いにメッセージを送信できます)。頂点doSomething.jsは、あなたの場合の頂点Bです。頂点Aがどこに配置されているかは関係ありません。頂点Aがしなければならないのは、完了したアドレスにメッセージを送信/発行することだけです。これにより、頂点Bがアンデプロイされます。

+0

返事をありがとう。 しかし、私の要件では、両方の頂点は独立しているので、私はそれをあなたが示すようにプログラム的に展開することはできません。 –

+0

これは問題ではありません。私は自分の答えを広げ、どのように動くかを見ることができます。 – haschibaschi

関連する問題