scala - 玩!异步操作 akka AskTimeoutException

标签 scala playframework-2.0 akka

我试图使用 akka Actor 使用询问模式发出最简单的异步请求,但无论如何我都会收到 akka.pattern.AskTimeoutException 。我所拥有的是这样的:

object Users extends Controller {

  def newUser = {
    val actor = Akka.system.actorOf(Props[UserRegistration])
    ActorAction[String](actor, "hello")(Ok(_))
  }
}

其中 ActorAction 是通常的 Async 的包装器:

object ActorAction {

  def apply[A](actorRef: ActorRef, msg: AnyRef, timeout: Timeout = 5 seconds)(f: A => Result)(implicit m: Manifest[A]): Action[AnyContent] = {
    Action {
      AsyncResult {
        ask(actorRef, msg, timeout).mapTo[A].asPromise.map(f)
      }
    }
  }

}

Actor 什么也不做,只是记录接收消息并返回它:

class UserRegistration extends Actor {
  val log = Logging(context.system, this)
  def receive = {
    case u => log.info("received " + u); u
  }
}

消息的记录工作正常。我已经尝试了一切,但没有任何作用。非常欢迎任何帮助!

Play :2.9.1 Akka :2.0.2

堆栈跟踪:

[info] play - database [default] connected at jdbc:postgresql://localhost:5432/ss_dev
[info] play - Application started (Dev)
[info] play - Starting application default Akka system.
[INFO] [12/28/2012 22:10:42.51] [application-akka.actor.default-dispatcher-1] [akka://application/user/$a] received hello
[error] play - Waiting for a promise, but got an error: Timed out
akka.pattern.AskTimeoutException: Timed out
at akka.dispatch.DefaultPromise.result(Future.scala:875) [akka-actor.jar:2.0.2]
at akka.dispatch.Await$.result(Future.scala:74) ~[akka-actor.jar:2.0.2]
at play.api.libs.concurrent.AkkaPromise.await(Akka.scala:43) ~[play_2.9.1.jar:2.0.4]
at play.api.libs.concurrent.Promise$class.await(Promise.scala:55) ~[play_2.9.1.jar:2.0.4]
at play.api.libs.concurrent.AkkaPromise.await(Akka.scala:28) ~[play_2.9.1.jar:2.0.4]
at play.api.libs.concurrent.Promise$class.value(Promise.scala:53) ~[play_2.9.1.jar:2.0.4]
Caused by: akka.pattern.AskTimeoutException: Timed out
at akka.pattern.PromiseActorRef$$anonfun$1.apply$mcV$sp(AskSupport.scala:274) ~[akka-actor.jar:2.0.2]
at akka.actor.DefaultScheduler$$anon$6$$anon$7.run(Scheduler.scala:183) ~[akka-actor.jar:2.0.2]
at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:94) [akka-actor.jar:2.0.2]
at akka.jsr166y.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1381) [akka-actor.jar:2.0.2]
at akka.jsr166y.ForkJoinTask.doExec(ForkJoinTask.java:259) [akka-actor.jar:2.0.2]
at akka.jsr166y.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:975) [akka-actor.jar:2.0.2]

提前致谢!

最佳答案

您没有回复消息发件人! u,请阅读Akka引用文档:http://doc.akka.io

关于scala - 玩!异步操作 akka AskTimeoutException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14075041/

相关文章:

scala - 转换 A => Seq[B] 的惯用方法

oop - Scala 游戏编程 - 介于 OOP 和 FP 之间

java - PersistenceException,列 'id' 指定两次

forms - 从请求中 Play Framework 2 绑定(bind)表单

java - 如何在 Play Framework 中上传文件?

database - 从数据库初始化 Actor 的最佳实践方法是什么

scala - 如何使 Scalatest 与 Spraytestkit 和 HttpServiceActor 一起工作

scala - Spark中的FP增长模型

java - 可以从现有的 java/scala 接口(interface)和数据类型生成 .thrift 文件吗?

java - Akka Http解析实体Java