У меня есть актер, который действует как супервизор, но также должен «возвращать» данные вызывающей стороне, независимо от того, является ли это актером или нет, это не имеет значения.
Я прошу своего Супервайзера, назовем его С.В.
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, и я, похоже, не могу понять, как отправить сообщение обратно запрашиваемому и вернуться к моему исходному потоку.