Поднятие актера верхнего уровня 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,

Другие вопросы по тегам