2016-12-29 36 views
1

當我需要在Vertx中創建新垂直時,任何人都可以給我最佳實踐。我知道每個垂直可以遠程部署並放入集羣。不過,我仍然有一個問題如何設計我的應用程序。好吧,我的問題是:在Vertx中創建新垂直的最佳實踐

  1. 是否還好有很多垂直的?
  2. E.g我創建了一個HttpServer,其中有很多服務端點。我想創建不同的子路由並根據啓用的功能(服務)進行設置。其中一些將啓動長期過程,並將使用事件總線在系統中生成新事件。這裏最好的方法是什麼?

例如,我可以vertx傳遞到每個端點作爲參數,並使用它來創建路由器:

getVertx().createHttpServer() .requestHandler(router::accept) .listen(Config.GetEVotePort(), startedEvent -> {..}); ... router.mountSubRouter("/api",HttpEndpoint.createHttpRoutes( getVertx(), in.getType()));

或者,我可以爲服務作爲一個垂直的,而不是通過創建的每個新端點Vertx。我的問題主要是關於是否可以將vertx作爲參數傳遞,或者當我需要這樣做時,我應該實現新的Vertical?

回答

1

我10美分:

  1. 是的,一點是可以有成千上萬verticles的,因爲據我所知它的名字來自單詞「顆粒」和整個構思是一種UNIX的JVM上的哲學賭注。因此,寫每個粒子/垂直做1件事,並做好。使用文本流在粒子之間進行通信,因爲這是一個通用界面。

那麼你的問題的答案是關於你有多少臺服務器?每臺服務器要啓動多少個JVM?你期望每個JVM使用什麼內存?在內存限制內,每個JVM可以運行多少個Verticle?你的消息大小有多大?網絡帶寬限制是多少?系統中有多少條消息?而且,事件總線能處理這種流量嗎?

  1. 然後就是關於Verticle是如何協同工作的,這基本上就是事件總線。我想你想要的是你的HttpServer將消息路由到一個事件總線,在這個事件總線上不同的Verticle被配置爲聽不同的「主題」(不同的文本流)。如果1個垂直啓動一個長期過程,它由總線上的事件觸發,然後它將輸出放回到下一個垂直/響應垂直的主題上。

同樣,這取決於您擁有多少個服務器/ JVM,以及您是否擁有集羣事件總線。

所以1個Verticle應該服務於多個端點,例如使用Router,是的,將來自HttpServer的給定請求與Route進行匹配,然後Route會選擇一個Handler,並且該Handler位於給定的Verticle中。

0

最好有很多verticle。這樣你的應用程序鬆散耦合,並且可以輕鬆地進行負載平衡。例如,如果您的負載很高,您可能需要1-3個路由垂直,但更多的工作者垂直。這樣,您只能增加工作人員的數量,而不會改變路由垂直的數量。

我不會建議將vertx作爲參數傳遞。改用EventBus,就像@rupweb已經建議的那樣。將路由Verticle之間的消息傳遞給worker並返回。這是您正在尋找的最佳做法: http://vertx.io/docs/vertx-core/java/#event_bus