Поднятие актера верхнего уровня Akka и перехват
В моей системе Akka есть актер верхнего уровня ("root"), Initializer
откуда все остальные актеры. Есть также актер, Destroyer
отвечает за корректное отключение системы при получении Destroy
сообщение. Есть несколько условий, при которых актер отправит Destroy
к Destroyer
, но это не имеет значения здесь.
Теперь я хотел бы реализовать функциональность в Initializer
"s SupervisorStrategy
где, если он не может обработать сбой / исключение, вызванное одним из своих детей, он интерпретирует это как событие типа "остановка мира" и корректно завершит работу системы.
Моя реакция коленного рефлекса состоит в том, чтобы иметь Initializer
Эскалация неудачи, но я не уверен, что происходит, когда эскалация самого главного актера. Было бы хорошо, если бы у этой эскалации был способ как-то вызвать Desroyer
, но не уверен, как подключить все это. Есть идеи?
1 ответ
Я ответил на аналогичный вопрос здесь: Как повысить высших руководителей в Акке?
По сути, в вашем наборе конфигурации:
akka.actor.guardian-supervisor-strategy = "akka.actor.StoppingSupervisorStrategy"
Тогда в вашем Initializer
Вы должны эскалировать любые исключения, которые вы хотите сделать фатальными для системы. Инициализатор будет остановлен. Вы могли бы смотреть Initializer
от Destroyer
и реагировать на Terminated
событие, или если вы хотите придерживаться своего обычая Destroy
сообщение, отправить Destroy
к Destroyer
от postStop()
в пределах Initializer
,