2016-05-01 5 views
0

actorRefまたは失敗したノードの名前を取得するにはどうすればよいですか?例外が1回発生した場合、ノードを再起動する必要があります。例外が1を超える場合は、再開する必要があります。OneForOneStrategyセットアップで失敗したアクタのactorRefを取得する方法は?

私は、スーパーバイザに特定のノードに何回例外があったかを記憶させることを考えましたが、どのノードが故障したか把握できません。多分アプローチは悪いかもしれません。

xは、障害が発生したノードが特定の例外を検出した回数です。

OneForOneStrategy() { 
    case _: FileNotFoundException => 
     // Need to know how many times node n has had this exception and restart/resume as required. 
     if(x == 1) 
      Restart 
     else 
      Resume 
    case _: Exception => Stop 
} 

答えて

0

あなたはFileNotFoundExceptionをキャッチし、除く俳優(自己)にActorRefフィールドが設定されているCustomExceptionを投げることができました。次に、あなたのOneForOneでCustomExceptionActorRefというフィールドが問題のアクターに設定されています。だから失敗した俳優への言及があり、スーパーバイザの中で説明したように例外数をチェックして、再開/再開の可否を呼び出す。

1

実際にスーパーバイザーのDeciderでは、失敗した子のActorRefをsender()メソッドで取得できます。

関連する問題