2016-04-03 28 views
4

私はvertxのJenkov's tutorialに従っています。ここで私は2つのファイルがあります。Eclipseのvertx verticleを停止する

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.java:VertxVerticleMain.javaを実行した後

import io.vertx.core.Vertx; 

public class VertxVerticleMain { 

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

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

を、私は、Eclipseのコンソールに"MyVerticle started!"を見ましたが、どのように知りませんMyVerticlestopと電話してください。

Jenkovによると、Vert.xがシャットダウンし、あなたのverticleを停止する必要があるときにstop()メソッドが呼び出されます。どのようにしてVert.xをシャットダウンし、このVerticleを停止させるのですか?私はMyVerticle stopped!をコンソールに見たいと思っています。 the Vert.x docsから

+0

シャットダウンフックの一部として '' '' ''が呼び出される_hunch_があります。 eclipseでコンソールセッションを終了すると(右上の赤い四角をクリックして)何が起こりますか? –

+0

@JornVernee:私はそれを試みましたが、何も起こりませんでした。カーソルはその位置にとどまり、何も印刷されませんでした。 –

+0

doc([link](http://vertx.io/docs/apidocs/))をチェックアウトしましたか? '' 'Vertx''は、動作するかもしれない' 'close''というメソッドを持っています。 –

答えて

6

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

あなたはmainメソッドからVert.xを実行します(たとえば、Eclipseで '停止' ボタンをクリックすることで)JVMプロセスを終了した場合、Vert.xはおそらくにISN頂点をアンデプロイするように通知されたか、またはVert.xが頂点をアンデプロイするまでにJVMが終了します。

あなたは垂直方向のアンデプロイになり、stop()メソッドが呼び出されることを保証するために多くのことを行うことができます。

  1. はVERTXのコマンドラインを使用して垂直方向のを開始します。プロセスを停止する(または停止するようにvert.xに指示する)と、Vert.xはすべてのverticleが展開されていないことを確認します。
  2. あなたは、プログラムdeploymentIdのリストを取得し、すべてのIDのアンデプロイを呼び出すことによって展開verticlesアンデプロイすることができます

    vertx.deploymentIDs().forEach(vertx::undeploy); 
    
  3. あなたは、プログラムを停止するVert.xを伝えることができます。

    vertx.close(); 
    
  4. シャットダウンフックを追加して、上記のいずれかのオプションがJVM終了時に実行されるようにすることができます。

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

Vert.x APIを呼び出すことによってプログラムをアンデプロイすることもできますし、Javaプロセスを停止することもできます。これにより、Vert.xプロセスが停止します。

ちなみに、実際には、verticleを実行しているプロセスが停止したときにstop()メソッドが常に呼び出される必要があるかどうかを確認する必要があります。あなたは決してそれが起こることを確信することはできません。プロセスが強制的に停止または強制終了されると、stop()メソッドが呼び出されないことがあります。

+0

私は 'vertx 'を追加しました。'deployVerticle'の後に' close() 'を実行しても' stop'の出力は表示されません。コンソールはプロセスが終了したと通知しました。 –

+0

頂点の配置は、非同期プロセスです。したがって、deployVerticleの直後にvertx.close()を呼び出すと、Vert.xはちょうど頂点を展開し始めました。 vertx.close()を呼び出すと、まだ展開されていない可能性があります。そのため、vertx.close()ではアンデプロイされません。 したがって、vertex.close()を呼び出す前にdeployVerticleを少し待つか、デプロイ完了時にコールバックを使用してdeployVerticleメソッドを使用してverticleをデプロイするまで待ちます。 'vertx.deployVerticle(verticle.deployVerticle(verticle、deployed - > { //デプロイ後に呼び出される '}); または上記のシャットダウンフックを使用してください。 –

+0

Vertx vertx = Vertx.vertx(); \t \t \t \t vertx.deployVerticle(展開新しいVerticle1()、 - > { \t \t \t \t \t \tのSystem.out.println( "垂直方向の開始後にコールバック"); \t \t \t vertx.close() ; \t \t}); このようなことをするつもりなら、うまくいきませんでした。 – venugopal

関連する問題