繁体   English   中英

Akka Config - application.conf - 设置Dispatcher和Router

[英]Akka Config - application.conf - Setting Dispatcher & Router

在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")

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

部署未被提取的原因是路由被创建为路由器的子节点,因此它们位于路径notificationServiceWorkers/*

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM