2013-12-21 68 views
3

一旦所有子演員完成處理,如何終止演員系統呢?我試圖使用以下內容:system.awaitTerminationsystem.shutdown。結果並非如預期那樣。阿卡終結演員系統

回答

5

參與者實際上並沒有「完成他們的處理」 - 他們仍然會在系統中等待事件處理。

因此,爲了制止它,你實際上必須明確地處理所有演員完成他們的工作的情況,例如,主演員期望演員在工作完成時向其發送消息,並且如果所有演員都已完成任務,關閉系統。

我會推薦閱讀nice article by Derek Wyatt(並且實際上閱讀他的書以及)標準的東西。有一個bit more advanced pattern由同一個作者在同一個網站上。

+4

請注意:如阿卡2.4的,你應該使用'ActorSystem.terminate()'代替'ActorSystem.shutdown()':[發佈說明](http://doc.akka.io/docs /akka/snapshot/project/migration-guide-2.3.x-2.4.x.html#Actor_system_shutdown) – 203

+0

@ 203是的,我發現你不應該在演員的系統上執行await Termination,因爲它本質上是一個僵局:-) – abatyuk

0

//這是我做到的。

helloActor ! PoisonPill.getInstance // send this to all ActorRef in ActorSystem 

while (!helloActor.isTerminated) { // check each ActorRef is terminated 
    println("sleep") 
    Thread.sleep(100) 
} 
actorSystem.shutdown