2014-11-03 10 views
8

Ich arbeite mit Akka und wir lernen uns immer noch kennen.Akka Dispatcher inherritance

Mein Szenario ist: Ich habe einen Nicht-Standard-Dispatcher für einen Supervisor (Eltern) -Akteur gewählt, der die Aufgabe hat, untergeordnete Akteure zu verwalten (zu beaufsichtigen) und die Arbeit zu erledigen.

Frage: Erbt der Kind Schauspieler den Schauspieler der Eltern?

Ich bin mir bewusst, dass Sie explizit einen anderen Dispatcher für untergeordnete Akteure von übergeordneten Akteuren gegeben angeben in der Konfiguration angeben können.

akka.actor.deployment { 
    /my-parent-actor { 
    dispatcher = dispatcher-for-parent 
    } 

    "/my-parent-actor/*" { 
    dispatcher = dispatcher-for-children 
    } 
} 

Meine Frage ist, wenn Sie das übergeordnete Akteur Dispatcher angeben, ohne explizit einen Dispatcher für die Kinder Akteure spezifiziert, gibt es Vererbung an die Kinder der Schauspieler der Eltern.

Antwort

14

Von dem, was ich gesehen habe, erbt das Kind nicht standardmäßig den Supervisor des Elternteils. Ich konnte dies nicht ausdrücklich überall in der Dokumentation finden, so schrieb ich einen kurzen Stück Code meine ursprüngliche Annahme zu überprüfen:

import com.typesafe.config.ConfigFactory 
import akka.actor._ 

object DispatcherTest extends App{ 

    val conf = ConfigFactory.parseString(""" 
     { 
      my-custom-dispatcher { 
      executor = "thread-pool-executor" 
      type = PinnedDispatcher   
      } 
     } 
    """) 

    val system = ActorSystem("test", conf) 
    val supervisor = system.actorOf(Props[MySupervisor].withDispatcher("my-custom-dispatcher")) 

} 

class MySupervisor extends Actor{ 
    println(s"I am the supervisor, my dispatcher is: ${context.dispatcher}") 
    val child = context.actorOf(Props[MyChild]) 
    def receive = { 
    case _ =>  
    } 
} 

class MyChild extends Actor{ 
    println(s"I am the child, my dispatcher is: ${context.dispatcher}") 
    def receive = { 
    case _ => 
    } 
} 

Wenn Sie dies ausführen, werden Sie sehen:

I am the supervisor, my dispatcher is: PinnedDispatcher[my-custom-dispatcher] 
I am the child, my dispatcher is: Dispatcher[akka.actor.default-dispatcher] 
+0

Dankhaufen . Gute Antwort! Es ist wirklich gut in dieser Phase des Kennenlernens mit Akka, um das, was ich sehe, mit jemandem zu korrelieren, der das gleiche Ergebnis hat. Danke noch einmal!! – neurozen