Obecnie poszukuję strategii Tolerancji usterek i nadzoru w Akka (wersja Java).Tolerancja na awarię Akka Java i ponowne uruchomienie odtwarzacza
na ... http://doc.akka.io/docs/akka/2.3.2/java/fault-tolerance.html i http://doc.akka.io/docs/akka/2.3.2/general/supervision.html#supervision
Kilka pytań:
1) Czy kiedykolwiek używać bloków try/catch w naszych aktorów, gdy wiemy, jakie wyjątki się spodziewać? Dlaczego lub dlaczego nie? Jeśli nie, czy powinniśmy polegać na strategii supervisora, aby skutecznie radzić sobie z wyjątkami, które dziecko może rzucić?
2) Domyślnie, jeśli żaden administrator nie jest jawnie skonfigurowany w aktorze nadrzędnym, wygląda na to, że każdy aktor podrzędny, który zgłasza wyjątek, zostanie domyślnie zrestartowany. Co jeśli żaden z twoich aktorów w twoim systemie nie nosi stanu ... Czy naprawdę powinniśmy robić restart?
3) Co należy zrobić, jeśli aktorzy najwyższego poziomu stworzeni przez system.actorOf (...) zgłaszają wyjątek? W jaki sposób zapewniasz strategię nadzoru poza systemem aktorskim?
4) Załóżmy scenariusz, w którym aktor A ma aktora dziecka B. A teraz powiedzmy, Aktor A prosi aktora B o wykonanie pracy.
Niektóre kod może wyglądać następująco:
Future<Object> future = Patterns.ask(child, message, timeout);
future.onComplete(new OnComplete<Object>() {
@Override
public void onComplete(Throwable failure, Object result) throws Throwable {
... handle here
}
teraz ... co, jeśli aktor jakoś zgłasza wyjątek. Domyślnie jest restartowany przez swojego przełożonego. Pytanie brzmi, czy "zamknięcie" onComplete nadal zostanie wykonane w przyszłości, czy też jest skutecznie "wymazywane" przy ponownym uruchomieniu?
5) Załóżmy, że mam hierarchię jako taką: A-> B-> C. Załóżmy też, że nadpisuję preRestart, tak że skutecznie NIE powstrzymuję moich dzieci. W prestarturze on wywołuje funkcję getContext(). ActorOf (B), aw prestarturze B wywołuje funkcję getContext(). ActorOf (C). Jeśli A zgłosi wyjątek, czy w systemie będzie więcej niż jeden aktor B i więcej niż jeden aktor C?
Dzięki!