AKKA .NET – definiowanie ścieżki aktora

W poprzednim poście użyliśmy metody ActorSelection w celu uzyskania referencji do aktora:

var actor1 = system.ActorSelection("/user/ApplicationUserControllerActor/Piotr")

Dzisiaj chciałbym bardziej skupić się na definiowaniu ścieżki do aktora. Pełna ścieżka może zawierać następujące elementy:
– protokół
– nazwa systemu
– adres ip aktora
– seria nazw aktorów opisująca hierarchie np. ApplicationUserControllerActor/actor1/actor2 itp.

Załóżmy, że nasz aktor znajduje się na innym komputerze. Oznacza to, aby wysłać jakieś wiadomości do niego musimy skorzystać z protokołu sieciowego. Nazwa ścieżki będzie wtedy wyglądać:

akka.tcp://FooHierarchySystem@89.124.43.14/user/ApplicationUserControllerActor/Piotr

Jeśli nie korzystamy ze zdalnych aktorów, wtedy moglibyśmy napisać:

akka://FooHierarchySystem/user/ApplicationUserControllerActor/Piotr

W poprzednim poście jednak nie musieliśmy podawać nazwy systemu (FooHierarchySystem). Wynika to z faktu, że akka .net wspiera ścieżki relatywne. ActorSlection wywoływaliśmy bezpośrednio na systemie, zatem nie było potrzeby precyzowania tego w ścieżce. Można to porównać do ścieżek relatywnych występujących w systemie plików.

Załóżmy, że jesteśmy teraz w aktorze ApplicationUserControllerActor i hierarchia jest taka sama jak w poprzednim wpisie:
controller

W celu uzyskania dostępu do jednej z instancji ApplicationUserActor możemy:

// Pierwsze podejście
Context.ActorSelection("akka://FooHierarchySystem/user/ApplicationUserControllerActor/Piotr");
// Drugie podejście
Context.ActorSelection("user/ApplicationUserControllerActor/Piotr");
// Trzecie podejście
Context.ActorSelection("Piotr");

Wszystkie ścieżki wskazują na tego samego aktora, a dwie ostatnie są relatywne. Podobnie z ApplicationUserControllerActor możemy:

Context.ActorSelection("../../ApplicationUserControllerActor").Tell(new AddUser("AnotherUser"));

Tak jak w ścieżkach systemu plików, ../ oznacza wejście o jeden poziom do góry. W powyższym przykładzie ../../ da nam referencję na /user, a potem schodzimy z powrotem na ApplicationUserControllerActor.

Leave a Reply

Your email address will not be published.