This earlier question предполагает, что вызов «stop» на актере-наблюдателе отключит всех связанных участников. Однако, если вы создаете «пользовательский» актер (не через фабрику), кажется, что этого автоматического выключения не происходит. Например, увидеть этот код от ответа на another question:Создание пользовательского Akka Supervisor, который отключает всех связанных участников.
class Module1 extends Actor {
self.faultHandler = OneForOneStrategy(List(classOf[Throwable]), 5, 5000)
def receive = {
case Register(actor) =>
self.link(actor)
}
}
Если «стоп» были названы по вышеуказанным Module1 актеру, актеры, связанные с ней не будут закрыты. Есть ли способ, чтобы пользовательский актер автоматически закрывал связанных участников? Или это просто то, что вы должны написать себе, если хотите создать пользовательский актер?
Спасибо!
, находясь в придирчивом настроении: хорошо бы отметить, что postStop() - идеальное место для размещения этого кода ;-) –
Я видел такой код в классе SupervisorActor в исходном коде Akka. Поэтому я мог бы скопировать и вставить этот код из SupervisorActor в свой собственный класс супервизора. Мне просто интересно, есть ли лучший способ, чем кодирование с копией и вставкой. Есть ли какие-либо другие действия, которые мне нужно скопировать и вставить в мой пользовательский супервизор? Как способность перезапускать детей, которые разбились? – bnsmith
Нет, это должно быть. Хотя, следует отметить, что вам не нужно делать это вручную в 2.0-M1 и вперед. –