我遇到了问题,我的程序的第二次调用会产生不可预测的行为。
我正在努力确保正常关闭akka-remoting应用程序。
我有两个演员系统,一个本地演员系统和一个远程演员系统。
本地演员系统
我首先启动远程actor系统,然后运行本地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")
}
这是更大代码库的一部分,这是我能够找到复制问题的最小代码。
为什么我的本地actor系统表现不同而不是在第二次调用时关闭?
本地演员执行以下操作
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(); }
}
Remoting工作正常,但对于此关机问题。
答案 0 :(得分:0)
根据我的理解,下面的代码行不会停止remoteActor。
localActor ! PoisonPill
因为PoisonPill会停止发送者角色及其所有子角色。 这里remoteActor不是localActor的子actor。 你可以分享本地演员系统的两个演员在第一次运行时停止的日志吗?