【发布时间】:2014-11-18 00:42:44
【问题描述】:
我在下面有一个主管,它使用默认的 Play! 创建子进程! 2.2Akka.system。当我试图立即杀死主管时,什么都没有发生,它会继续处理。
class ImportSupervisor extends Actor {
import akka.actor.AllForOneStrategy
import akka.actor.SupervisorStrategy._
import scala.concurrent.duration._
val log = Logging(context.system, this)
override val supervisorStrategy =
AllForOneStrategy(maxNrOfRetries = 10, withinTimeRange = 1 hour) {
case e: Exception => Stop
}
override def preStart() {
Logger.info("supervisor starting up at "+self.toString)
}
def receive = {
case p: Props => context.actorOf(p)
}
}
下面是我用来杀死有大约 1000 个孩子的主管的代码:
Akka.system.actorSelection("akka://application/user/"+actorName) ! Kill
我可以验证我得到的 ActorPath 是正确的,但问题是 Kill 不会立即生效。我对Stop 进行了同样的尝试。我究竟做错了什么?假设它会立即关闭是错误的吗?
【问题讨论】:
-
按照设计,Akka 从不保证任何事情都会“立即”执行,甚至在特定延迟之后执行。例如,当安排一个任务在“2 秒”内执行时,您不应该假设它会在 2 秒内有效地运行。
标签: scala playframework-2.0 akka