我創建了主演員和兒童演員(使用Master的router
創建)。Akka。如何知道所有的兒童演員完成他們的工作
高手收到一些工作,並將這項工作分成小任務,並將它們發送給兒童演員(路由)。
我試圖解決的問題是,當兒童演員完成他們的工作時,我該如何正確通知我的主人?
在一些教程(Pi approximation和例如,從斯卡拉在行動書)碩士演員從兒童接受響應試圖比較任務的初始陣列收到的結果的大小尺寸後:
if(receivedResultsFromChildren.size == initialTasks.size) {
// it's mean children finished their job
}
但我認爲這很糟糕,因爲如果一些小孩演員拋出異常,那麼它不會將結果發回給發送者(回到主),所以這種情況永遠不會評估爲true
。
那麼如何正確地通知主人,所有的孩子都完成了他們的工作?
我覺得選項之一是Broadcast(PoisonPill)
孩子,然後(使用所謂deathWatch
)聽Terminated(
路由器)
消息。它可以解決嗎?
如果使用Broadcast(PoisonPill)
更好,那麼我是否應該註冊一些監督策略,以防止異常情況下的某些routee?因爲如果發生異常,那麼routee將會重新啓動,正如我所知,這意味着主演將永遠不會收到Terminated(
路由器)
。這是對的嗎?
有所謂的[aggerator模式](http://doc.akka.io/docs/akka/snapshot/contrib/aggregator.html) – jilen