2014-11-03 28 views
8

Sto lavorando con Akka e stiamo ancora imparando a conoscerci.Akka dispatcher inheritance

Il mio scenario è: ho scelto un dispatcher non predefinito per un supervisore (genitore) attore il cui ruolo è gestire (supervisionare) e creare attori secondari per svolgere il lavoro.

Domanda: fa l'attori bambini ereditano attore del genitore?

Sono consapevole del fatto che è possibile in modo esplicito specificare un dispatcher diverso per gli attori figlio dagli attori principali specificati nella configurazione.

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

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

La mia domanda riguarda se si specifica l'attore dispatcher genitore, senza specificare esplicitamente un dispatcher per gli attori bambini, c'è l'eredità ai figli di attore del genitore.

risposta

14

Da quello che ho visto, il figlio non erediterà il supervisore del genitore per impostazione predefinita. Non riuscivo a trovare esplicitamente nei documenti ovunque, così ho scritto un pezzo veloce di codice per verificare la mia ipotesi iniziale:

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 _ => 
    } 
} 

Se si esegue questo, si vedrà:

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

cumuli Grazie . Bella risposta! E 'veramente bello in questa fase di "conoscere-ogni-altra-volta-a-altra" con Akka correlare ciò che vedo con qualcun altro che ha lo stesso risultato. Grazie ancora!! – neurozen