Акка - Как перезапустить ребенка, порожденного роутером?

У меня есть 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), в этом случае вы создаете дочерние субъекты и поставляете их на маршрутизатор. Это означает, что вы отвечаете (вы, как родительский участник этих маршрутов) полностью отвечаете за их жизненный цикл. Таким образом, вы бы определили стратегию надзора в родительском объекте, и тогда все будет работать так, как вы этого хотите.

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