/ / Prečo je Akka Kill neukončuje tohto supervízora a jeho deti? - scala, playframework-2.0, akka

Prečo sa Akka Kill nekončí týmto školiteľom a jeho deťmi? - scala, playframework-2.0, akka

Mám supervízora, ktorý vytvára podriadené procesy pomocou predvolenej hry Play! 2.2 Akka.system, Keď sa pokúsim okamžite zabiť supervízora, nič sa nestane a udržuje spracovanie.

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)
}
}

Nižšie je uvedený kód, ktorý používam na zabitie supervízora, ktorý má približne 1 000 detí:

Akka.system.actorSelection("akka://application/user/"+actorName) ! Kill

Môžem overiť, že dostávam ActorPath správne, ale problém je Kill nepôsobí okamžite. Skúšal som to isté Stop, Čo robím zle? Je nesprávne predpokladať, že sa okamžite vypne?

odpovede:

4 pre odpoveď č. 1

Je nesprávne predpokladať, že sa okamžite vypne?

Áno.

Na Kill správa bude zapísaná v poštovej schránke herca rovnako ako akákoľvek iná správa. Kill správa bude musieť počkať.

Toto všetko je vysvetlené v dokumentácii:

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