1

我有一个Actor使用Router. 当其中一个孩子失败时。我在 startegy 中收到有关失败的通知。但是,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;
        });

我还从这篇SO 帖子中发现,如果 a 的孩子Router终止,Router则不会自动产生新的孩子。而且,当路由器的所有子节点都终止时,Router它自己也会终止。

现在是百万美元的问题 - 重新启动由 a 产生的孩子的正确方法是Router什么?

4

1 回答 1

1

看来您正在使用Pool路由器(它启动自己的孩子)。相反,您要使用的是Group路由器(组路由器文档),在这种情况下,您创建子 Actor 并将它们提供给路由器。这意味着您负责(您作为这些路由的父参与者)完全负责它们的生命周期。因此,您可以在父级中定义监督策略,然后一切都按照您的意愿工作。

于 2014-11-18T20:23:11.557 回答