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ď č. 1Je 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