加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala – Akka演员询问和类型安全

发布时间:2020-12-16 09:20:33 所属栏目:安全 来源:网络整理
导读:如何使用Akka Actor询问和维护类型安全?或避免使用询问有利于告诉? 打电话时或者问一个Akka演员,未来[Any]被返回,我必须通过future.mapTo [MyType]进行显式转换. 我不喜欢失去这种类型的安全.如果我直接使用Futures(没有演员),我可以明确地返回Future [MyT
如何使用Akka Actor询问和维护类型安全?或避免使用询问有利于告诉?

打电话时或者问一个Akka演员,未来[Any]被返回,我必须通过future.mapTo [MyType]进行显式转换.

我不喜欢失去这种类型的安全.如果我直接使用Futures(没有演员),我可以明确地返回Future [MyType]并维护类型安全.

我的具体用例涉及一个演员将其消息委托给两个子演员,然后聚合来自这些演员的结果,并将其返回给父发件人.我的父母的接收方法在Akka文档中看起来类似于这种方法:

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.基本上,它们允许您使用强类型特征/接口而不是通过交换消息与actor进行交互.幕后Akka使用动态代理实现这些接口,并执行异步魔术.

类型的actor可以返回具有不同的强类型返回值的方法(从上述文档):

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

这些方法代表告诉,而剩下的是不同的问候语.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读