Akka: Что происходит, когда вы говорите ActorRef, а он ожидает, что вы спросите?

У меня есть следующее:

val future = myActor ? Message

И в моем актере мое сообщение о получении имеет что-то вроде этого:

sender ! Response

Если я сделаю следующее и проигнорирую ответ, будут ли какие-либо негативные последствия?

myActor ! Message

Может быть, я просто пропустил, где это сказано в документации. Это похоже на метод, который возвращает значение, а вызывающая сторона не присваивает возвращаемое значение чему-либо? Если я сделаю этот вызов от другого актера, возникнут ли в результате какие-то странные проблемы с потоками или утечки памяти? Мои модульные тесты, похоже, не затронуты, но это как-то надумано. Я надеюсь, что просто слишком много думаю о проблеме и, возможно, не могу найти ответ, потому что это глупый вопрос, который никто в здравом уме не задает.


person Mike Nishizawa    schedule 07.08.2013    source источник


Ответы (1)


С шаблоном запроса Response получает временный легковесный актор (PromiseActorRef).

В случае myActor ! Message должно быть неявное ActorRef в области видимости. Response будет отправлен на этот неявный ActorRef. Это сообщение не будет удалено сборщиком мусора, пока вы его явно не прочитаете.

Если в области видимости нет неявного ActorRef, используется Actor.noSender, а Response будет переадресовано в deadLetters системы.

Если вы сделаете этот звонок от другого актера, это Response будет доставлено в окно сообщений этого другого актера.

person senia    schedule 07.08.2013
comment
Ничего себе, быстрый модульный тест подтвердил это. Я не смог найти это в deadLetters, но я уверен, что дело было скорее в том, как я это делал, чем в правильности вашего утверждения. Спасибо! - person Mike Nishizawa; 08.08.2013
comment
@Mike: Это из документации. ! метод: def !(message: Any)(implicit sender: ActorRef = Actor.noSender): Unit ; noSender: Default placeholder (null) used for "!" to indicate that there is no sender of the message, that will be translated to the receiving system's deadLetters.. - person senia; 08.08.2013