【发布时间】:2018-06-01 14:31:40
【问题描述】:
最近我发现自己在类中封装了演员,这样我就可以找回在处理ActorRefs 时失去的一点类型安全性。
最后,问题是,我不仅需要发送特定消息,还需要将响应转换为预期结果。
所以我想我可以向包含Promise的actor发送消息,以便他们最终报告结果。
这是个坏主意吗?它对我来说看起来很整洁......类型安全并且效果一样好。为什么没有人提出这个想法?有什么我没有注意到的问题吗?
询问基于模式的解决方案
case class GetUser(id:Long)
(actorRef ! GetUser(1l)).mapTo[User]
class UserRepoActor extends Actor{
def receive={
case GetUser(id)=>
sender() ! getUser(id)
}
...
}
基于承诺的解决方案
case class GetUser(id: Long, resp: Promise[User])
val req = GetUser(1l,Promise())
actorRef ! req
req.resp.future // No casting!!
class UserRepoActor extends Actor{
def receive={
case GetUser(id,resp)=>
response.success(getUser(id))
}
...
}
【问题讨论】:
-
向 Actor 发送包含 Promise 的消息是什么意思?在任何情况下,您都必须对传入消息进行模式匹配。你能发布一些代码示例吗?
标签: scala promise akka-actor