2013-12-15 19 views
2

我有一個阿卡路由器這樣的:如何更改阿卡路由器的大小?

ActorRef router = getContext().actorOf(
    new RoundRobinPool(instancecount) 
     .props(Props.create(Node.class, po)), po.getUID()); 

然後我想更改路由器instancecount。我該怎麼辦?

+0

爲什麼要在創建後更改它? – mavilein

+0

因爲我想通過使用控制頁面來修改路由器的大小,並且在生產環境中這將不時修改 – lol

+0

但是最有可能的事情是將路由器的大小與可用內核數量。這是不太可能改變的。我不認爲這很容易實現。我想你必須停止舊的路由器,並用上面的代碼片段創建一個新路由器。但是您可以使用消息來執行此操作:-) – mavilein

回答

3

我認爲Resizer可能是你可以嘗試給你彈性在你的路由器池來處理突發負載。如果你想以編程方式設置與重新定尺寸的路由器,那麼這將是這個樣子(從阿卡例如在Routing 文檔拍攝):

val resizer = DefaultResizer(lowerBound = 2, upperBound = 15) 
val router3 = system.actorOf(Props[ExampleActor1].withRouter(
    RoundRobinRouter(resizer = Some(resizer)))) 

在這個例子中,池將開出2個routees,但可以根據通過路由器池頭部的消息量來擴展至15。你也可以直接從你的akka​​配置中做到這一點。如果您有(從阿卡文檔再次)這樣的配置:

akka.actor.deployment { 
    /myrouter2 { 
    router = round-robin 
    resizer { 
     lower-bound = 2 
     upper-bound = 15 
    } 
    } 
} 

,那麼你可以設置你的游泳池像這樣採取配置的優勢:

val router = system.actorOf(Props[ExampleActor].withRouter(FromConfig()), "myrouter2") 

退房,我聯繫到文檔有關如何爲您的游泳池設置Resizer的更多信息。希望這是滿足您需求的解決方案。

+0

謝謝。您在示例中創建路由器池時使用Resizer,但是我想在創建後更改它,並且我不知道創建路由器池時的上限,因此還有其他方法可以更改路由器的大小路由器池?或者我們可以在創建後更改Resizer的上限嗎? – lol

相關問題