スーパーバイザーとして機能するアクターがありますが、これがアクターであるかどうかに関係なく、呼び出し元にデータを「返す」必要もあります。
私はスーパーバイザーに尋ねています。彼を 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 を呼び出した人への参照ではなくなりました。メッセージを依頼者に送り返し、元の流れに戻る方法がわかりません。