【发布时间】:2014-03-27 14:48:52
【问题描述】:
我有以下代码:
class A extends Actor with ActorLogging {
override val supervisorStrategy = OneForOneStrategy(maxNrOfRetries = 2) {
case _ => log.info("An actor has been killed"); Restart
}
val b = context.system.actorOf(Props[B], "b")
def receive = {
case _ => context.system.scheduler.schedule(5 seconds, 5 seconds, b, true)
}
}
class B extends Actor with ActorLogging {
def receive = { case true => self ! Kill }
}
在演员A 的实例中self ! Kill 之后,我没有看到消息“演员已被杀死”,随后对演员A 的调用会生成“死信”消息,因此没有重新启动。为什么OneForOneStrategy 没有被调用?
奇怪的是,我可以删除整个 OneForOneStrategy 覆盖并且程序行为没有任何变化。
【问题讨论】:
标签: scala akka actor fault-tolerance