3
如果你想同時執行長時間運行的計算(在一臺機器上),Akka演員可以提供幫助。Akka:演員產卵vs填滿郵箱
一種方法是爲每件作品產生新的演員。類似於
while(true) {
val actor = system.actorOf(Props[ProcessingActor])
(actor ? msg).map {
...
system.stop(actor)
}
}
第二個想法是在路由器後面配置一定數量的actor。然後將所有消息發送到路由器。
val router = system.actorOf(Props[ProcessingActor].withRouter(RoundRobinRouter(nrOfInstances = 5)))
while(true) {
(router ? msg).map { ... }
}
我想知道,如果系統過載(傳入消息的速率高於處理速率),這會更好嗎?
哪個更長?而且最終都會用OOMError炸燬系統?
同意 - 期貨對於這種類型的用例非常有用。 – sourcedelica
@ericacm我不同意。如果您知道您將以相同的方式完成大量工作並需要某種錯誤處理(例如重新啓動失敗)。然後定義一組演員來處理工作似乎更可靠。演員然後接收他們應該在消息中做的工作,處理該消息併發送響應。如果某個演員崩潰(出於某種原因),您有一位主管重新啓動該演員,並讓其再次嘗試。使用期貨我相信這將是更難做(當然不是不可能,但更難)。但是,我想這取決於用例。 –
Thx澄清。有意義的是,演員比消息更昂貴。 – rompetroll