首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Akka Actor ask和类型安全

Akka Actor ask和类型安全
EN

Stack Overflow用户
提问于 2012-11-30 00:46:00
回答 1查看 3.3K关注 0票数 17

如何使用Akka Actor ask和维护类型安全?或者避免使用ask而倾向于tells?

在Akka Actor上调用?ask时,会返回一个Future[Any],我必须通过future.mapTo[MyType]进行显式强制转换。

我不喜欢失去这个类型的安全性。如果我直接使用Futures (没有参与者),我可以显式地返回Future[MyType]并维护类型安全。

我的特定用例涉及一个参与者将其消息委托给两个子参与者,然后聚合来自这两个参与者的结果,并将结果返回给父参与者的发送者。我父母的接收方法类似于Akka文档中的这种方法:

http://doc.akka.io/docs/akka/2.0/scala/futures.html#For_Comprehensions

代码语言:javascript
复制
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

有没有更好的方法来实现我的用例?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-30 02:08:20

试试typed actors。基本上,它们允许您使用强类型的特征/接口与参与者交互,而不是通过交换消息。在幕后,Akka使用动态代理实现了这些接口,并实现了异步魔术。

类型化的参与者可以返回具有不同的强类型返回值的have方法(来自上面提到的文档):

代码语言:javascript
复制
def squareDontCare(i: Int): Unit //fire-forget

def square(i: Int): Future[Int] //non-blocking send-request-reply

def squareNowPlease(i: Int): Option[Int] //blocking send-request-reply

def squareNow(i: Int): Int //blocking send-request-reply

这些方法代表tell,而剩下的方法则是不同风格的ask

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13630585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档