Akka的.conf调度程序配置是否有效?

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")添加到Props时,一切正常工作,并且使用了my-dispatcher。但我不喜欢为所有我的actors都添加 .withDispatcher(...) 的想法...

有人知道问题出在哪里吗?我觉得actor路径可能是错误的,但是apllication.conf路由配置正常工作(除了自定义routee dispatcher)。


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

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

调度程序已经从配置文件中正确配置。

我猜测启用远程访问后,Akka会在其他地方查找演员调度器的配置,或者远程引用具有不同的逻辑路径?

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 工具,并在线程选项卡下看到了 pinned dispatcher。


谢谢提供的信息,使用“test”子配置确实可以正常工作。但是一旦将调度程序和部署配置移回到“根目录”,它就停止工作了。 - Seigert
我发现问题是由akka.remote.RemoteActorRefProvider引起的 - 当禁用它时,一切都正常工作。 - Seigert
这听起来像是一个 bug,请问你能否在我们的 Assembla 追踪器上开一个工单吗?谢谢! - Roland Kuhn
@Seigert,你能负责打开这个bug吗?毕竟是你发现的。 - cmbaxter
错误报告在这里:https://www.assembla.com/spaces/akka/tickets/3445#/activity/ticket: - rintcius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接