【问题标题】:akka dispatcher is not workingakka 调度程序不工作
【发布时间】:2015-04-27 06:00:18
【问题描述】:

我在附加的 conf 文件中编写我的调度程序的设置,然后将其加载到 application.conf 但是当我给出调度程序位于我的文件中的完整路径时调度程序不起作用我还确保它调度程序存在或不使用 if statarements

val config = ConfigFactory.load()

      // an actor needs an ActorSystem
      val system = ActorSystem("TestActorSystem",config)
      if(system.dispatchers.hasDispatcher("akka.actor.directUserWriteMongoActor-dispatcher"))
      {println("directUserWriteMongoActor-dispatcher exists")}
      else
      {
        println("dispatcher does not exists")
      }

当我运行directUserWriteMongoActor-dispatcher 时打印在控制台上,但是当我尝试通过代码附加它时

 val DirectUserWriteMongoActor = system.actorOf(Props[DirectUserWriteMongoActor].withDispatcher("akka.actor.directUserWriteMongoActor-dispatcher"), name = "directwritemongoactorr")
      DirectUserWriteMongoActor ! DirectUserWriteToMongo(directUser)

日志表明它正在使用 default-dispatcher 而不是我自己的名为 directUserWriteMongoActor-dispatcher 的调度程序 这是我的完整代码

应用程序.conf

include "DirectUserWriteMongoActor" 

akka {
   loggers = ["akka.event.slf4j.Slf4jLogger"]
   loglevel = "DEBUG"

}

DirectUserWriteMongoActor.conf

akka {
   loggers = ["akka.event.slf4j.Slf4jLogger"]
   loglevel = "DEBUG"

  actor{
     loggers = ["akka.event.slf4j.Slf4jLogger"]
   loglevel = "DEBUG"
    ############################### Setting for a Dispatcher #####################################              
    directUserWriteMongoActor-dispatcher {
         type = Dispatcher
    executor = "fork-join-executor"
  fork-join-executor {
    parallelism-min = 2
    parallelism-factor = 2.0
    parallelism-max = 10
  }
  throughput = 10         
                  } #end default-dispatcher 

   }  #end Actor
}  #end Akka        

这是我的代码

object TestActor extends App{
 val config = ConfigFactory.load()
 val system = ActorSystem("TestActorSystem",config)

      if(system.dispatchers.hasDispatcher("akka.actor.directUserWriteMongoActor-dispatcher"))
      {println("directUserWriteMongoActor-dispatcher exists")}
      else
      {
        println("directUserWriteMongoActor-dispatcher does not exists")
      }

      val DirectUserWriteMongoActor = system.actorOf(Props[DirectUserWriteMongoActor].withDispatcher("akka.actor.directUserWriteMongoActor-dispatcher"), name = "directwritemongoactorr")
      DirectUserWriteMongoActor ! DirectUserWriteToMongo(directUser)

DirectUserWriteMongoActor.scala

    case class DirectUserWriteToMongo (directuser:DirectUser) 

     class DirectUserWriteMongoActor extends Actor{

      val log = Logging(context.system, this)
     def receive = {
      case DirectUserWriteToMongo(directuser) =>
          log.debug("writing to mogo")

           log.info("message received DirectUserWriteInMongo")
           val directUserStore= new directUserStore
           log.info("going to call store in mongo")
}}

这是控制台上打印的输出

2015-04-27 10:40:01.392 INFO  Slf4jLogger [TestActorSystem-akka.actor.default-dispatcher-2]  -Slf4jLogger started
directUserWriteMongoActor-dispatcher exists
2015-04-27 10:40:02.262 INFO  DirectUserWriteMongoActor [TestActorSystem-akka.actor.default-dispatcher-3] akka://TestActorSystem/user/directwritemongoactorr -message received DirectUserWriteInMongo
2015-04-27 10:40:02.263 INFO  DirectUserWriteMongoActor [TestActorSystem-akka.actor.default-dispatcher-3] akka://TestActorSystem/user/directwritemongoactorr -going to call store in mongo

请帮助我在我的代码或我的 conf 设置中有什么问题 disptacher 在那里但它不起作用为什么操作系统这样 这应该打印出来

TestActorSystem-akka.actor.directUserWriteMongoActor-dispatcher-3

而不是这个

TestActorSystem-akka.actor.default-dispatcher-3

请帮助我,我也是第一次使用 akka dispatch 和其他 conf 文件

【问题讨论】:

    标签: scala configuration akka scala-2.11


    【解决方案1】:

    您可能正在使用 SimpleLogger。此记录器使用默认调度程序进行记录。

    您的代码没有任何问题。包括:println(context.dispatcher) 到你的 actor 接收方法会通知你,他正在使用正确的 directUserWriteMongoActor 调度器。

    另一方面,如果您将println(system.dispatcher) 添加到您的 App 对象中,您会发现在 actor 之外使用了默认调度程序。这是正确的,因为您只指定了 Actor 的调度程序,而不是全局使用的调度程序。

    【讨论】:

    • 那么应该使用哪个记录器来显示当前调度程序。??因为根据我的日志,我发现我的调度员没有工作
    • 默认的 Akka 记录器怎么样?只需从所有地方删除 loggers = ["akka.event.slf4j.Slf4jLogger"] 即可。
    • 好的,但我正在使用 loggers = ["akka.event.slf4j.Slf4jLogger"] 将日志写入文本文件,当我删除此 loggers 行日志时停止写入文件我应该怎么做现在?
    • 那么您可能想继续使用 SLF4J,但选择与 SimpleLogger 不同的实现,例如 logback。这是您可能想阅读的问题:stackoverflow.com/questions/14149798/…
    猜你喜欢
    • 2015-04-04
    • 2016-12-26
    • 2015-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多