Akka配置 - application.conf - 设置调度程序和路由器

3
在Akka 2.2.0中,我有一个轮询路由的Actor,我想在其上设置一个自定义调度程序。
在我的application.conf文件中,我有以下内容:
durable-dispatcher {
  mailbox-type = akka.actor.mailbox.filebased.FileBasedMailboxType
}

akka.actor.deployment {
  /notificationServiceWorkers {
    dispatcher = durable-dispatcher
    router = round-robin
    nr-of-instances = 5
  }
}

现在,当我尝试像这样创建这个演员时:
ActorRef notificationServiceWorkers = akka.actorOf(Props.create(NotificationServiceActor.class)
   .withRouter(new FromConfig()), "notificationServiceWorkers")

调度程序没有从配置中获取,它使用默认的调度程序。

如果我删除.withRouter,Akka可以很好地获取调度程序的配置,但显然不再路由。

如果我像这样添加.withDispatcher;

ActorRef notificationServiceWorkers = akka.actorOf(Props.create(NotificationServiceActor.class)
       .withDispatcher("durable-dispatcher")
       .withRouter(new FromConfig()), "notificationServiceWorkers")

一切都正常运行。问题是(从文档中不清楚),如果我想要从 application.conf 加载调度程序和路由器配置,为什么需要在创建 Props 时同时提供两者?这是一个错误吗?

3个回答

5
您的部署未被接受的原因是路由器的子级创建了路由员,因此它们位于路径 notificationServiceWorkers/*

3

在深入研究LocalActorRefProvider中的Akka代码时,您可以看到在actorOf内部,如果是非路由演员,他们只从部署配置中获取调度程序。我想他们有他们的理由,但对于您来说,这意味着如果您要使用路由器并且想要不同的调度程序(而不是默认调度程序),则需要在Props实例上明确使用withDispatcher,并且您将无法从配置中获取它。再次强调,我不知道这是否是一个错误,但从他们的代码来看,似乎他们有意不在路由演员时从配置中拉取。


太好了。谢谢cmbaxter。我认为这也是预期的功能。但我很想知道原因。 - NightWolf

1
作为Roland Kuhn回答的补充,以下内容可行:
"/notificationServiceWorkers/*" {
  dispatcher = durable-dispatcher
}

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