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もそれ自体を終了します。

今、百万ドルの質問 - によって生成された子を再起動する正しい方法は何Routerですか?

4

1 に答える 1

1

ルーターを使用しているようですPool(独自の子を開始します)。代わりに使用したいのはGroupルーター ( group router docs ) です。この場合、子アクタを作成してルーターに提供します。これは、あなたが担当していることを意味します (これらのルートの親アクターのあなた) は、そのライフサイクルを完全に担当しています。そこで、親で監視戦略を定義すると、すべてが希望どおりに機能します。

于 2014-11-18T20:23:11.557 に答える