【发布时间】:2015-12-21 05:50:03
【问题描述】:
如何使用 Akka Actor 询问和维护类型安全?还是避免使用 ask 来支持 tell?
在 Akka Actor 上调用 ? 或 ask 时,会返回 Future[Any],我必须通过 future.mapTo[MyType] 进行显式转换。
我不喜欢失去这种类型的安全性。如果我直接使用 Futures(没有演员),我可以显式返回 Future[MyType] 并保持类型安全。
我的具体用例涉及一个演员将它的消息委托给两个子演员,然后汇总这些演员的结果并将其返回给父母的发件人。我父母的接收方法看起来类似于 Akka Docs 中的这种方法:
http://doc.akka.io/docs/akka/2.0/scala/futures.html#For_Comprehensions
val f1 = actor1 ? msg
val f2 = actor2 ? msg
val f3 = for {
a ← f1.mapTo[Int]
b ← f2.mapTo[Int]
c ← ask(actor3, (a + b)).mapTo[Int]
} yield c
有没有更好的方法来实现我的用例?
【问题讨论】:
-
typed actors 呢?
-
谢谢。我一定错过了文档中的那一点——它们似乎符合要求。 'When to use Typed Actors' 部分和链接的博客文章都很好读,并且很好地说明了为什么 Actors 是无类型的。我现在想我会尝试坚持使用无类型的演员。如果您作为答案发布,我会接受。
标签: scala asynchronous akka actor future