Как использовать PreRestart в Akka Typed?

Я только что столкнулся с проблемой в своей работе, которая соответствует https://github.com/akka/akka/issues/26899.

Как я могу написать типизированное поведение, где я могу получить

case (reason: Throwable, message: Option[Any]) =>

для перезапуска (аналогично нетипизированным актерам) внутри моего Behaviors.receive для обработки исключений для конкретных сообщений?

Так что пока я вижу только получение PreRestart:

Behaviors.receiveMessage {
  msg =>
    //...
}.receiveSignal {
  case (actor, signal) =>
    println(signal)
    //...
}

person mtsokol    schedule 19.05.2019    source источник


Ответы (1)


PreRestart — это не обработчик исключений, а возможность сделать очистку. Чтобы подчеркнуть это, сигнал был максимально простым в Akka Typed.

Вы могли бы сказать, что это также следствие парадигмы «Let It Crash»: если ожидается исключение, вы можете просто обработать его там, где оно произошло. Однако, если исключение является неожиданным, то это именно тот случай, когда должны обрабатываться надзор за акторами и автоматические перезапуски: не предполагайте ничего, а начните с чистого листа.

Типизированная стратегия контроля (учебное сообщение) может быть выбрана по типу исключения. Даже там детали не могут быть рассмотрены по той же причине.

person jrudolph    schedule 22.05.2019