Scala 我如何在剧中的演员之间传递回复!和阿克卡
我正在使用Play2.0和Akka部署一个web应用程序。我根据责任划分了参与者,因为这些参与者通常需要在单个web请求期间相互通信 例如,给定一个管理已注册设备的参与者,它必须查询另一个处理关联用户帐户的参与者: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
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
}
}
}