2011-12-16 4 views
1

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 актеру, актеры, связанные с ней не будут закрыты. Есть ли способ, чтобы пользовательский актер автоматически закрывал связанных участников? Или это просто то, что вы должны написать себе, если хотите создать пользовательский актер?

Спасибо!

ответ

2

Вы можете позвонить "self.linkedActors.values.iterator", а затем отправить PoisonPill или остановить() их.

+0

, находясь в придирчивом настроении: хорошо бы отметить, что postStop() - идеальное место для размещения этого кода ;-) –

+0

Я видел такой код в классе SupervisorActor в исходном коде Akka. Поэтому я мог бы скопировать и вставить этот код из SupervisorActor в свой собственный класс супервизора. Мне просто интересно, есть ли лучший способ, чем кодирование с копией и вставкой. Есть ли какие-либо другие действия, которые мне нужно скопировать и вставить в мой пользовательский супервизор? Как способность перезапускать детей, которые разбились? – bnsmith

+0

Нет, это должно быть. Хотя, следует отметить, что вам не нужно делать это вручную в 2.0-M1 и вперед. –

 Смежные вопросы

  • Нет связанных вопросов^_^