自定义akka邮箱配置(Scala)

时间:2017-02-15 19:46:45

标签: scala akka actor

我创建了名为CustomMailBox的自定义邮箱,该邮箱源自MyUnboundedMessageQueueSemantics个特征。然后我将这些配置放入application.conf:

custom-dispatcher {
  mailbox-requirement =
    "com.MyUnboundedMessageQueueSemantics"
}

akka.actor.mailbox.requirements {
  "com.MyUnboundedMessageQueueSemantics" =
    custom-dispatcher-mailbox
}

custom-dispatcher-mailbox {
  mailbox-type = "com.CustomMailBox"
}

akka.actor.deployment {
  /myactor {
    dispatcher = custom-dispatcher
  }
}

之后我以这种方式创建我的演员:

val system = ActorSystem("mySystem")
val quadrocopter = system.actorOf(Quadrocopter.props(vrep, clientID, handler)
        .withDispatcher("custom-dispatcher"), "myactor")

在运行我的程序后,我收到了这个错误:

Exception in thread "main" akka.ConfigurationException: Dispatcher [custom-dispatcher] not configured for path akka://mySystem/user/myactor
    at akka.actor.LocalActorRefProvider.actorOf(ActorRefProvider.scala:758)
    at akka.actor.dungeon.Children$class.makeChild(Children.scala:273)
    at akka.actor.dungeon.Children$class.attachChild(Children.scala:46)
    at akka.actor.ActorCell.attachChild(ActorCell.scala:374)
    at akka.actor.ActorSystemImpl.actorOf(ActorSystem.scala:732)
    at Simulation$.delayedEndpoint$Simulation$1(Simulation.scala:24)
    at Simulation$delayedInit$body.apply(Simulation.scala:12)
    at scala.Function0$class.apply$mcV$sp(Function0.scala:34)
    at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
    at scala.App$$anonfun$main$1.apply(App.scala:76)
    at scala.App$$anonfun$main$1.apply(App.scala:76)
    at scala.collection.immutable.List.foreach(List.scala:381)
    at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:35)
    at scala.App$class.main(App.scala:76)
    at Simulation$.main(Simulation.scala:12)
    at Simulation.main(Simulation.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

有人可以解释一下我的错误吗?

1 个答案:

答案 0 :(得分:0)

通过在配置文件中将/myactor更改为" */myactor"来解决问题。 第二步是在创建actor时删除withDispatcher()函数的调用。