Акка - Как перезапустить ребенка, порожденного роутером?
У меня есть Actor
что создает детей, используя Router
, Когда один из детей терпит неудачу. Меня предупреждают в старте о сбое. Тем не менее Actor
не перезапускается сам по себе.
private static SupervisorStrategy strategy = new OneForOneStrategy(10, Duration.create("1 minute"),
throwable -> {
Directive directive;
if (throwable instanceof SocketTimeoutException) {
directive = SupervisorStrategy.restart();
} else {
directive = SupervisorStrategy.stop();
}
return directive;
});
Я также узнал из этого поста, что если ребенок Router
заканчивается, Router
не будет автоматически порождать нового ребенка. А также, когда все дочерние элементы маршрутизатора завершаются, Router
завершает себя также.
Теперь вопрос на миллион долларов - Как правильно перезапустить ребенка, которого породил Router
?
1 ответ
Кажется, что вы используете Pool
роутер (запускает своих детей). Вместо этого вы хотите использовать Group
router ( group router docs), в этом случае вы создаете дочерние субъекты и поставляете их на маршрутизатор. Это означает, что вы отвечаете (вы, как родительский участник этих маршрутов) полностью отвечаете за их жизненный цикл. Таким образом, вы бы определили стратегию надзора в родительском объекте, и тогда все будет работать так, как вы этого хотите.