我试图在application.conf
配置文件中配置Play 2.2.x中的自定义Akka调度程序,如下所示:
contexts.my-dispatcher {
fork-join-executor {
parallelism-max = 4
}
}
此外,我还要以编程方式指定withDispatcher
Akka.system.actorOf(Props(classOf[MyActor], arg1, arg2)
.withDispatcher("contexts.my-dispatcher"), name = "MyActor")
或者,最好,我想在配置中直接进行
akka.actor.deployment {
/MyActor {
dispatcher = contexts.my-dispatcher
}
}
这两种情况似乎都不像我在日志文件中那样起作用(application.log;通过logback配置;通过ActorLogging记录)我看到default-dispatcher-[X]
正在使用。例如:
2013-12-30 11:37:40,999 - [DEBUG] - from x.y.z.MyActor in application-akka.actor.default-dispatcher-7
Some message
当我故意指定错误的调度程序名称时,我使用default-dispatcher"得到未配置的#34; Dispatcher [错误名称]。由于我没有通过上述配置/代码得到此警告,我假设一般情况下它应该没问题。有人可以对这里发生的事情有所了解吗?
logback appender配置(application-logger.xml)是:
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${application.home}/logs/application.log</file>
<encoder>
<pattern>%date - [%level] - from %logger in %thread %n%message%n%xException%n</pattern>
</encoder>
</appender>
答案 0 :(得分:1)
ActorLogging是异步的。使用ActorLogging进行日志记录时,它会向日志记录actor发送一条消息,该消息默认在默认调度程序上运行。 Logback记录调用它的线程,它将是ActorLogging actors线程,而不是您的actor线程。 Logback不了解actor,因此它不知道日志消息最初来自哪个调度程序。
尝试使用logback(或slf4j)直接进行日志记录,然后您应该看到正确的调度程序。