2016-08-21 9 views
1

OneForOneStategyを使用して、子がスローするときに子が再起動するようにするRoundRobinPoolがあります。akka.netのみプール内の単一のルートを再起動

var strat = new OneForOneStrategy(1, TimeSpan.FromSeconds(5), e => Directive.Restart); 

var props = Props.Create<ThrowAlwaysActor>() 
         .WithRouter(new RoundRobinPool(2)) 
         .WithSupervisorStrategy(strat); 

var router = system.ActorOf(props, "myrouter"); 
router.Tell("1"); 

出力:

唯一の例外を投げrouteeを再起動し、再起動なっプール全体を避けるために、ラウンドロビンプールを設定する方法
akka://loadSystem/user/myrouter/$b PRERESTART <-- pool init 
akka://loadSystem/user/myrouter/$a PRERESTART <-- pool init 
akka://loadSystem/user/myrouter/$a OnReceive() 
[ERROR][8/21/2016 8:21:02 AM][Thread 0004][akka://loadSystem/user/myrouter] The method or operation is not implemented. 
akka://loadSystem/user/myrouter/$a PRERESTART <-- the actor that threw is being restarted 
akka://loadSystem/user/myrouter/$b PRERESTART <-- this actor should not be restarted 

私はこのようなルータを作成しています。

答えて

1

は流暢な小道具ビルダーの代わりにプールのコンストラクタに戦略を渡す必要があります。

var routerStrat = new OneForOneStrategy(-1, TimeSpan.FromSeconds(5), e => Directive.Restart); 

var props = Props.Create<ThrowAlwaysActor>() 
         .WithRouter(new RoundRobinPool(2, resizer, routerStrat, null)); 
関連する問題