我有一组类似于akka actors的链式结构
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完成处理后才进行最终处理),但不用说,它看起来很糟糕。我尝试使用flatmaps,但无法使其正常工作。有什么好的建议让它看起来更好吗? 谢谢