我有一个演员,它充当主管,但还需要将数据“返回”给调用者,这是否是演员无关紧要。
我在问我的主管,我们称他为 SV。
SV 处理我发送给他的消息,并返回一个响应。
val system = ActorSystem("ActorSystem")
val sv = system.actorOf(Props[SV], name = "SV")
sv ? msg
而 SV 的接收方法是这样的:
def receive = {
case msg => (someChild ? msg).pipeTo(sender)
...
}
这一切都很好。问题是当孩子抛出异常时,这个异常被主管策略捕获。
override def supervisorStrategy = OneForOneStrategy () {
case e : Throwable => {
val newResponse = someNewResponse
sender ! newResponse
...
}
}
sender 不再是对首先调用 SV 的人的引用,而且我似乎无法弄清楚如何将消息发送回被询问者,并回到我原来的流程。