2017-04-03 26 views
0

Vertx是否有一種簡單的方法來設置創建所有Verticle時將使用的選項?如何設置VertxOptions以便在每個Verticle中使用?

在交互式調試器中調試Vertx時,需要設置一些選項以防止Vertx監視程序代碼(例如BlockedThreadChecker)拋出異常。

問題是我不知道如何設置Vertx選項,以便它們將由Vertx.vertx()工廠方法返回的所有Vertx實例使用。

例如,

public static void main(String[] args){ 
    VertxOptions vertxOptions = new VertxOptions(); 
    vertxOptions.setBlockedThreadCheckInterval(999888777666L); 
    vertxOptions.setMaxEventLoopTime(999888777666L); 
    Vertx myVertx = Vertx.vertx(vertxOptions);   // (A) 
    Verticle myVerticle = new MyVerticle();    // (B) 
    myVertx.depoyVerticle(myVerticle);     // (C) 

    App myApp = new App(); 
    myApp.run(); 
} 

public void run(){ 
    Vertx vertx = Vertx.vertx();      // (D) 
    vertx.deployVerticle(new AnotherVerticle()); 
} 

Some other code 
class AnotherVerticle extends AbstractVerticle { 
    public void someOtherCode(){ 
     Verticle myVerticle = new MyVerticle();   // (E) 
     vertx.deployVerticle(myVerticle);    // (F) 
    } 
} 

工序(A)創建具有設置選項的Vertx實例。通過試驗和錯誤,當這個實例被用來部署Verticle時,Vertx BlockedThreadChecker不會抱怨。

在步驟(B)中,當AbstractVerticle如何獲得步驟(A)中設置的選項時,會創建一個新的Vertx實例?

此外,在具有實現其它類Verticles(如(E)和(F),如何能那些Vertx情況下可以用)在步驟(A所用的相同的選項創建的。

在不正確地這樣做,我看到接收到類似

WARNING: Thread Thread[vert.x-eventloop-thread-0,5,main] has been blocked for 5853 ms, time limit is 2000 
    io.vertx.core.VertxException: Thread blocked 
    ... 

回答

1

堆棧跟蹤信息,您可以從一個單一的JsonObject創建新VertxOptions實例。

但是,爲什麼你需要所有的Vert.x實例擺在首位?併購在每個進程中應該有一個Vert.x實例。

+0

我不一定需要多個Vertx實例,但是如果我有多個擴展AbstractVerticle的類,那麼每個類都是自己唯一的Vertx實例。一位同事建議我監聽配置更改,然後將配置更改應用於每個Vertx實例。我還沒有看過這樣做。 – PatS

+0

這是不正確的。如果您使用單個Vert.x實例部署所有Verticle,則不會創建其他實例。 – tsegismont

+0

我沒有使用deploy vertical,只是用新的MyClass(它擴展了AbstractVerticle)創建它們。我在我的方式中看到了錯誤,你說的話很有道理!燈泡的時刻。謝謝 – PatS

相關問題