为什么Akka Kill不会终止这位主管及其子女?

时间:2014-09-23 17:39:04

标签: scala playframework-2.0 akka

我在下面有一个使用默认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尝试过同样的事情。我究竟做错了什么?假设它会立即关闭是错误的吗?

1 个答案:

答案 0 :(得分:4)

  

假设它会立即关闭是错误的吗?

Kill消息将像其他任何消息一样排入演员的邮箱中。如果前面还有其他消息,其他actor正在忙于处理另一条消息,Kill消息将不得不等待。

所有这些都在文档中解释:

http://doc.akka.io/docs/akka/2.2.4/scala/actors.html#Stopping_actors