2
我試圖創建一個簡單的應用程序,它有兩個參與者:訂閱多個演員是一紙空文在阿卡
- 碩士演員,處理一些應用程序的行爲
- DeadLettersListener是應該處理所有死亡或未處理消息
這裏是一個完美的作品代碼:
object Hw extends App {
// creating Master actor
val masterActorSystem = ActorSystem("Master")
val master = masterActorSystem.actorOf(Props[Master], "Master")
// creating Dead Letters listener actor
val deadLettersActorSystem = ActorSystem.create("DeadLettersListener")
val listener = deadLettersActorSystem.actorOf(Props[DeadLettersListener])
// subscribe listener to Master's DeadLetters
masterActorSystem.eventStream.subscribe(listener, classOf[DeadLetter])
masterActorSystem.eventStream.subscribe(listener, classOf[UnhandledMessage])
}
雖然根據akka手冊,ActorSystem是一個沉重的對象,我們應該只爲每個應用程序創建一個。但是,當我替換這些行:此代碼
val deadLettersActorSystem = ActorSystem.create("DeadLettersListener")
val listener = deadLettersActorSystem.actorOf(Props[DeadLettersListener])
:
val listener = masterActorSystem.actorOf(Props[DeadLettersListener], "DeadLettersListener")
訂閱不工作了,並DeadLettersListener沒有得到任何死或無法處理的消息。
你能解釋一下我做錯了什麼,並給出一個建議如何在這種情況下訂閱死信?
非常感謝!你的答案幫助我縮小了範圍,並確定了我有其他代碼最終確實存在的問題 'masterActorSystem.shutdown()' 我認爲這會殺死主演員,但顯然它會殺死所有流演員,包括DeadLettersListener。 –