使用UUID命名时为akka actor定义调度程序

时间:2017-04-08 21:09:03

标签: java playframework akka actor dispatcher

我有一个使用Akka actor在java上构建的播放应用程序。最近我遇到了与并行性相关的性能问题。我通过谷歌发现我们可以为演员分配自定义/固定的调度员/执行者。在创建actor时,我已经使用附加了唯一ID的actor名称命名了actor。

当演员姓名附加了唯一ID时,有没有办法指定我的演员使用固定调度员。

我正在尝试更新application.conf,如下所示,并没有按预期获得结果。它仍在使用默认调度程序。

我的演员在akka:// application / user / actor

akka.actor.deployment {
  "/actorName*" {
       dispatcher =  mycustom-dispatcher
  }
}

我使用的参考文献:http://doc.akka.io/docs/akka/2.1.4/java/dispatchers.html#Setting_the_dispatcher_for_an_Actor

3 个答案:

答案 0 :(得分:1)

是的,您可以明确地将指派者分配给您的演员[s]。

import akka.actor.Props
val myActor =
  context.actorOf(Props[MyActor].withDispatcher("my-dispatcher"), "myactor1")

或java变体:

ActorRef myActor =
  system.actorOf(Props.create(MyUntypedActor.class).withDispatcher("my-dispatcher"),
    "myactor3");

配置

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

检查akka-docs

的更多内容

答案 1 :(得分:0)

您必须指定要与actor一起使用的调度程序,通常会传递执行上下文,您可以在其中指定要使用的调度程序:

implicit val executionContext = system.dispatchers.lookup("my-dispatcher")

您还可以更改此处指定的默认调度程序: https://doc.akka.io/docs/akka/snapshot/scala/dispatchers.html#default-dispatcher

答案 2 :(得分:0)

akka.actor.deployment {
  "/actorName*" {
    dispatcher =  mycustom-dispatcher
  }
}

上述方法无效,因为(来自documentation):

  
      
  • 通配符无法用于部分匹配部分,例如:/foo*/bar/f*o/bar等。
  •   

但是,您可以使用通配符匹配actor层次结构中特定级别的所有actor。例如,让我们说您想要使用自定义调度程序的所有actor都位于akka://application/user/someParent/下。然后,您可以通过以下方式配置所有someParent的直接子项:

akka.actor.deployment {
  "/someParent/*" {
    dispatcher =  mycustom-dispatcher
  }
}

阅读链接文档以获取更多选项。