Akka: как получить Детского актера при перезапуске

При перезапуске системы вызов context.children() возвращает ноль дочерних элементов для определенного родителя. Перед перезапуском context.children() возвращал фактическое количество дочерних элементов, которые были у родителя.

Может кто-нибудь, пожалуйста, дайте мне знать, как мы можем получить дочерний объект ActorRef для родителя после перезапуска?

Мой вариант использования:

Перед перезапуском допустим 5 дочерних элементов родителя. Теперь я хочу подсчитать производительность, а для подсчета производительности мне нужно участие всех этих 5 детей. Итак, после перезапуска я мог бы просто отправить одно и то же сообщение всем детям, после чего дети будут работать и отвечать родителю. Однако после перезапуска я даже не знаю, кем были дети. Итак, каков наилучший способ решения подобных проблем?


person achin    schedule 09.02.2017    source источник


Ответы (2)


Один из способов — сделать родительский актор постоянным, сделав его состояние списком дочерних идентификаторов. Таким образом, при перезагрузке системы и повторном создании родительского объекта он восстановит свое состояние.

person flare    schedule 30.03.2017

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

Итак, как упоминалось в flare, вам также необходимо сделать своего родительского актера постоянным и сохранить все дочерние имена. И затем во время перезапуска ваш постоянный родительский актор должен вручную воссоздать все эти отношения «родитель-потомок» на основе сохраненных идентификаторов (имен) через context.actorOf(...)

person Andrei    schedule 10.11.2017