Scala 我如何在剧中的演员之间传递回复!和阿克卡

Scala 我如何在剧中的演员之间传递回复!和阿克卡,scala,playframework-2.0,akka,Scala,Playframework 2.0,Akka,我正在使用Play2.0和Akka部署一个web应用程序。我根据责任划分了参与者,因为这些参与者通常需要在单个web请求期间相互通信 例如,给定一个管理已注册设备的参与者,它必须查询另一个处理关联用户帐户的参与者: class DeviceActor extends Actor { val accountActorRef = ... def receive = { case GetAccountByDeviceId(id:String) => val acc

我正在使用Play2.0和Akka部署一个web应用程序。我根据责任划分了参与者,因为这些参与者通常需要在单个web请求期间相互通信

例如,给定一个管理已注册设备的参与者,它必须查询另一个处理关联用户帐户的参与者:

class DeviceActor extends Actor {

  val accountActorRef = ...

  def receive = {
    case GetAccountByDeviceId(id:String) =>
      val accountId = getAccountIdAssociatedWithDevice(id)
      accountActorRef ? GetAccountById(accountId) map {
        case account: Account => sender ! account
      }
  }

}
从控制器调用DeviceActor时,我总是

akka.pattern.AskTimeoutException
在未来或承诺中调用map时,实际上是在注册回调。引用发送方在回调闭包中被捕获,但发送方仅在DeviceActor处理消息时被适当设置

在receive方法存在之前,您必须捕获senders引用:

class DeviceActor extends Actor {

  val accountActorRef = ...

  def receive = {
    case GetAccountByDeviceId(id:String) =>
      val X = sender
      val accountId = getAccountIdAssociatedWithDevice(id)
      accountActorRef ? GetAccountById(accountId) map {
        case account: Account => X ! account
      }
  }

}
在未来或承诺中调用map时,实际上是在注册回调。引用发送方在回调闭包中被捕获,但发送方仅在DeviceActor处理消息时被适当设置

在receive方法存在之前,您必须捕获senders引用:

class DeviceActor extends Actor {

  val accountActorRef = ...

  def receive = {
    case GetAccountByDeviceId(id:String) =>
      val X = sender
      val accountId = getAccountIdAssociatedWithDevice(id)
      accountActorRef ? GetAccountById(accountId) map {
        case account: Account => X ! account
      }
  }

}