0
我有一個問題,我的程序的第二次調用給出了不可預知的行爲。遠程Akka演員系統的終止
我正在嘗試確保akka-remoting應用程序的正常關閉。
我有兩個演員系統,一個本地演員系統和一個遠程演員系統。
本地演員系統
- 創建兩個演員,一個在本地系統上,一個在遠程
- 關閉自己下來
我第一次啓動遠程演員系統,然後運行本地演員系統。
當我第一次運行它時,一切正常,並且本地actor系統關閉(遠程仍然運行)。但是如果我第二次運行這個(不重新啓動遠程系統),行爲是不同的,兩個角色系統開始跳動。 本地不關閉。
最小代碼複製行爲是低於
本地演員系統
object ActorAsSink_7 extends App {
val system = ActorSystem("system")
val localActor = system.actorOf(MyActor_4.props)
val remoteActor = system.actorOf(MyActor_4.props, "remote_agent")
localActor ! PoisonPill
}
遠程演員系統
object RemoteActorSystem extends App {
import system.dispatcher
implicit val system = ActorSystem("remote-actorsystem")
// actors in this actor system are created remotely
println("hello.. remote agent is up")
}
這是一個更大的代碼部分基地,這是最低限度,我能找到repl這個問題。
爲什麼我的本地角色系統的行爲不同並且在第二次調用時沒有關閉?
本地演員做以下
object MyActor_4 {
val props = Props[MyActor_4]
}
class MyActor_4 extends Actor with ActorLogging {
def receive = { case x: Any => log.error("unexpected message in reaper: " + x) }
override def postStop = { println ("shutting down...") ; context.system.terminate(); }
}
遠程處理工作正常,但對於這個問題,關機。
要關閉ActorSystem,你可以這樣做'system.shutdown' 停止localActor&remoteActor而不停止ActorSystem'system.actorSelection(「/ user/*」)! PoisonPill' 可以查看詳情 http://stackoverflow.com/questions/9356986/stop-all-actors-in-a-system-without-shutting-down-the-system-itself – Advika