DevStart Blogi Napisano Grudzień 3, 2015 Zgłoś Udostępnij Napisano Grudzień 3, 2015 Dzisiaj zacząłem pisać post o hierarchii aktorów. Jest to bardzo ważny element w celu osiągnięcia skalowalności i dobrej obsługi błędów (np. poprzez izolacje wadliwych aktorów). W połowie jednak stwierdziłem, że najpierw wypada napisać krótki wpis o zdarzeniach (hooks), jakie możemy zdefiniować w AKKA. Pozwoli nam to potem lepiej zrozumieć przepływ informacji w hierarchiach aktorów. Każdy aktor, może znajdować się w następujących etapach: Starting – aktor został dopiero stworzony i nie przetwarza jeszcze wiadomości Receiving – aktor może teraz otrzymywać wiadomości Stopping – zwalnianie zasobów Terminated – aktor nie może już otrzymywać wiadomości, ponadto w tym stanie, nie może zostać już wznowiony. Restarting – aktor aktualnie jest resetowany. Oznacza to, że po restarcie może przejść do “Starting”, a potem do “Receiving”, czyli będzie w stanie ponownie przetwarzać wiadomości. Z perspektywy kodu, poszczególne stany można obserwować, przeciążając odpowiednie metody: OnStart (Starting) – metoda wywołana przed rozpoczęciem otrzymywania jakichkolwiek wiadomości PostStop (Stopping) – zwalnianie zasobów PreRestart – przed rozpoczęciem restartu. PostRestart po zakończeniu restartu, ale jeszcze przed ponownym wywołaniem OnStart. Kod: class FooActor : UntypedActor { protected override void OnReceive(object message) { Console.WriteLine("Received: {0}", message); } protected override void PreStart() { Console.WriteLine("PreStart"); base.PreStart(); } protected override void PostStop() { Console.WriteLine("PostStop"); base.PostStop(); } protected override void PreRestart(Exception reason, object message) { Console.WriteLine("PreRestart"); base.PreRestart(reason, message); } protected override void PostRestart(Exception reason) { Console.WriteLine("PostRestart"); base.PostRestart(reason); } } W celu przetestowania możemy: var system = ActorSystem.Create("system"); var actor = system.ActorOf<FooActor>(); actor.Tell("Hello World!"); system.Shutdown(); system.AwaitTermination(); Poszczególne metody, przydadzą się w następnym wpisie, poświęconym hierarchii aktorów oraz relacjami między aktorami. Każdy z aktorów może być zarządcą więc śledzenie czasu życia aktorów jest pomocne w zrozumieniu tych zasad. Wyświetl pełny artykuł Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.