4

我正在使用 Akka 2.2-RC1,但无法让 Akka 从 application.conf 加载调度程序配置:

my-dispatcher {
  type = PinnedDispatcher
  executor = "thread-pool-executor"
}

akka.actor.deployment {
  /test {
    dispatcher = my-dispatcher
  }
}

当从代码实例化时

 val test = system.actorOf(Props[Test], "test")

通过日志它仍在使用akka.actor.default-dispatcher.

当我添加.withDispatcher("my-dispatcher")到道具时,一切都正常工作并被my-dispatcher使用。但我不喜欢添加.withDispatcher(...)到我所有的演员的想法......

有谁知道哪里有问题?我在想actor路径可能是错误的,但是apllication.conf路由配置可以正常工作(再次自定义routee调度程序除外)。


经过一些测试,我发现这种效果是由使用RemoteActorRefProvider. 一旦我禁用它并更改为默认值

akka.actor.provider = "akka.actor.LocalActorRefProvider"

调度员从配置正确配置。

我猜想启用远程处理后,Akka 会在别处寻找演员调度程序的配置,或者远程引用可能有不同的逻辑路径?

4

1 回答 1

6

在您使用的同一版本的 akka 上,这对我来说效果很好。我的配置:

test{
  my-dispatcher {
    type = PinnedDispatcher
    executor = "thread-pool-executor"
  }

  akka.actor.deployment {
    /test-actor {
      dispatcher = my-dispatcher
    }
  }
}

我的代码:

object ActorTest{
  def main(args: Array[String]) {
    val conf = ConfigFactory.load()
    val system = ActorSystem("test", conf.getConfig("test"))
    val ref = system.actorOf(Props[TestActor], "test-actor")
  }
}

class TestActor extends Actor{
  def receive = {
    case _ =>
  }
}

我使用了 jconsole 并显示固定调度程序列在“线程”选项卡下

于 2013-06-13T23:59:53.630 回答