Akka演员/ scala-单个onSuccess可以进行多个询问

莫希特

我有一群像阿卡族演员

A --> B --> C

演员A“询问”演员B,后者又“询问”演员C。演员A需要等待,直到演员C完成处理。B是一个薄层,无非是将消息传递(询问)给C并将Future返回给A。基本上,B只是这样做

        { case msgFromA => sender ! C ? msgFromA }

因此,A得到的是Future [Any]。

A处理请求的方式是使用嵌套映射

actorRefFactory.actorOf(Props[A]) ? msgA map {
        resp =>
          // Type cast Any to Future and use another map to complete processing. 
          resp.asInstanceOf[Future[_]] map {
            case Success =>
              // Complete processing
            case Failure(exc) =>
             // Log error

这是可行的(即,仅当演员C完成处理后才进行最终处理),但不用说它看起来太可怕了。我尝试使用平面图,但无法使其正常工作。任何使它看起来不错的想法:)谢谢

让·洛格特

一种更合适的方法:

A

val f: Future[MyType] = (B ? msg).mapTo[MyType]
f onComplete {
  case Success(res) => // do something
  case Failure(t) => // do something
}

在中B,使用forward

{ case msgFromA => C forward msgFromA }

C

// call database
// update cache
sender() ! res   // actually sends to A

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章