我有一個演員,作爲主管,但也需要「返回」數據給調用者,這是否是演員應該不重要。發送給發件人,從主管,如果失敗
我在問我的主管,讓我們稱他爲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
...
}
}
發送者不再對誰在第一個地方叫SV的引用,我似乎無法工作,如何將消息發送回askee,並回到我原來的流程。
我不確定我是否理解,「原來的信息需要通過主管到達孩子,然後回來」,這是不是我正在做的,當我從主管問'孩子'?它永遠不會直接返回到我問的地方,因爲發生異常,所以SupervisorStrategy會被擊中。從這裏我現在想發送一條消息給原始發件人(來自主管),有不同的迴應,如果我的問題仍然不夠清楚,我可以根據需要用流程圖進行更新。 – Kao
啊,對,我沒有正確解析'ask'的用法;是的,這就是我的意思。然後,在制定supervisorStrategy時,您仍然需要在管理員中捕獲原始的'sender',這意味着管理未完成請求的數量(以免混淆)。 –