scala - Akka调度器继承

标签 scala inheritance akka parent-child dispatcher

我正在和 Akka 一起工作,我们仍在逐渐了解彼此。

我的场景是:我为主管(父) Actor 选择了一个非默认调度员,他的角色是管理(监督)和创建子 Actor 来完成工作。

问题:子 Actor 是否继承了 parent 的 Actor ?

我知道您可以从配置中指定的父actor 中为子actor 显式指定不同的调度程序。

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

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

我的问题是,如果您指定父actor 调度程序,而没有明确指定子actor 的调度程序,是否有对父actor 的子代的继承。

最佳答案

据我所知,默认情况下, child 不会继承 parent 的主管。我无法在任何地方的文档中明确找到这一点,因此我编写了一段快速代码来验证我的初始假设:

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]

关于scala - Akka调度器继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26706968/

相关文章:

java - 在什么情况下scala正确地将String转换为java.lang.String

list - 使用 scanLeft 打包符号

scala - 如何安装和使用 Scrooge

C++如何从main调用派生基类函数

C++ 继承 : protected variables not available

scala - 访问执行上下文

events - 等待akka actor系统可用

scala - 如何将 ask 的结果转换为适当的类型?

OSGI 容器中的 Scala?

javascript - 通过 this 在 typescript 中从派生类型调用构造函数