【问题标题】:Akka Config - application.conf - Setting Dispatcher & RouterAkka 配置 - application.conf - 设置调度程序和路由器
【发布时间】:2013-08-26 03:40:02
【问题描述】:

在 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 创建中同时提供这两者?这是一个错误吗?

【问题讨论】:

    标签: java akka


    【解决方案1】:

    您的部署没有被选中的原因是路由是作为路由器的子级创建的,因此它们位于路径notificationServiceWorkers/*

    【讨论】:

      【解决方案2】:

      在深入查看 LocalActorRefProvider 中的 Akka 代码时,您可以在 actorOf 内部看到,如果调度程序是非路由参与者,它们只会从部署配置中获取调度程序。我想他们这样做是有原因的,但这对您来说意味着,如果您要使用路由器并且想要不同的调度程序(默认调度程序除外),则需要明确使用 withDispatcher Props 实例,您将无法从配置中获取它。同样,我不知道这是否是一个错误,但从他们的代码的外观来看,当它是一个路由演员时,他们似乎故意不从配置中提取。

      【讨论】:

      • 太好了。谢谢cmbaxter。我认为这也是预期的功能。有兴趣知道为什么。
      【解决方案3】:

      作为对 Roland Kuhn 回答的补充,这是有效的:

      "/notificationServiceWorkers/*" {
        dispatcher = durable-dispatcher
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-17
        • 1970-01-01
        • 2013-10-08
        • 1970-01-01
        • 2018-08-04
        相关资源
        最近更新 更多