我有一群像阿卡族演员

A --> B --> C

演员A“询问”演员B,而演员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

关于scala - Akka Actor /scala-单个onSuccess多次询问,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26343282/

10-10 04:18