2016-10-27 53 views
1

Vert.x是否對部署的Verticle有任何開銷?在沒有必要的情況下解除他們的任何理由嗎?不需要的Verticle開銷並取消部署

請看MyVerticle - 它的唯一目的是在應用程序啓動時執行load,在加載此verticle後不需要。 撥打consumer.unregister()是否足夠?是否有任何理由取消部署MyVerticle

public class MyVerticle extends AbstractVerticle { 

    private MessageConsummer consumer; 

    @Override 
    public void start() { 
     consumer = vertx.eventBus().consumer(AppConstants.SOME_ADDRESS, this::load); 
    } 

    @Override 
    public void load(Message message) { 
     LocalMap<Short, String> map = vertx.sharedData().getLocalMap(AppConstants.MAP_NAME); 
     try (
       DataInputStream in = new DataInputStream(new BufferedInputStream(new FileInputStream(AppConstants.INDEX_PATH))) 
     ) { 
      while (true) { 
       map.put(
        in.readShort(), 
        in.readUTF() 
       ); 
      } 
     } catch(EOFException eof) {  
      message.reply(AppConstants.SUCCESS); 
     } catch (IOException ioe) { 
      message.fail(100, "Fail to load index in memory"); 
      throw new RuntimeException("There are no recovery policy", ioe); 
     } finally { 
      //is this sufficient or I need to undeploy them programmatically? 
      consumer.unregister(); 
     } 
    } 
} 

回答

2

Verticles可以看作是對Vert.x運行的應用程序,部署/取消部署只能有一個小的開銷,例如,如果你正在做high availability or failover。在這種情況下,Vert.x將需要跟蹤已部署的實例,監視故障並重新生成其他節點上的垂直等。

取消部署還將允許您執行任何清理(儘管您在您的示例中不使用它)通過調用stop()方法。

在不考慮HA的情況下運行時,取消部署將只允許您恢復由Verticle分配但未被引用的任何內存(加上與保留部署Verticle的內部跟蹤有關的內存,這應該是可忽略的單個對象引用)。

+0

謝謝你的回答!是的,我會用'-ha'選項部署我的Verticle。所以我\你的建議是解除他們,對吧? –

+0

是的。這個想法是,即使Verticle沒有做什麼,但由於某種原因JVM崩潰了,「HA」沒有狀態的概念,並且將會在集羣某個地方重新部署之前部署的Verticle,而您不需要這樣做。 –

相關問題