我在下面有一个使用默认Play创建子进程的主管! 2.2 Akka.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
尝试过同样的事情。我究竟做错了什么?假设它会立即关闭是错误的吗?
答案 0 :(得分:4)
假设它会立即关闭是错误的吗?
是
Kill
消息将像其他任何消息一样排入演员的邮箱中。如果前面还有其他消息,其他actor正在忙于处理另一条消息,Kill
消息将不得不等待。
所有这些都在文档中解释:
http://doc.akka.io/docs/akka/2.2.4/scala/actors.html#Stopping_actors