2014-11-03 95 views
8

我正在與Akka合作,我們仍然彼此瞭解。Akka調度員繼承權

我的方案是:我選擇了一個非默認調度員,負責管理(監督)並創建子actor來完成這項工作。

問題兒童演員是否繼承父母的演員

我知道你可以顯式地指定一個不同的調度器,用於在配置中指定的父actor的子actor。

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

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

我的問題是關於如果指定父演員調度,沒有明確指定爲孩子的演員調度員,有沒有繼承父母的演員的孩子。

回答

14

從我所看到的,孩子默認情況下不會繼承父母的主管。我找不到這個明確任何地方文檔,所以我寫了一個快速的代碼來驗證我的最初的假設:

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

如果你運行它,你會看到:

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

感謝堆。很好的答案!在Akka的這個每個其他階段都非常好,可以將我所看到的與具有相同結果的其他人相關聯。再次感謝!! – neurozen 2014-11-05 04:17:48