Wie bekomme ich die absolute Remote-Actor-URL aus dem Actor?

8

Ich möchte etwas so machen.

Schauspieler A:

%Vor%

Darsteller B: (dies remote eingesetzt) ​​

%Vor%

Ich möchte, dass er mir die Zeichenfolge akka zurückgibt: //10.4.20.40: 2555 / slave / user / slaverunner. Aber was ich bekomme ist nur akka: // sklave. Wie bekomme ich den Remote-Host und den Port? . Die Eigenschaften Host, Port und Hostport für das Adressobjekt geben nichts zurück

    
questionersam 11.01.2013, 23:03
quelle

4 Antworten

7

Wenn Sie

anrufen %Vor%

In Akteur A erhalten Sie die Adresse des Absenders. Sie müssen die Adresse also nicht an ein anderes Akteursystem weiterleiten, solange Sie eine Nachricht an sie senden können.

Akka gibt Ihnen keinen entfernten Pfad für einen Akteur im lokalen System, weshalb self.path.address.toString in Akteur B nicht funktioniert.

Wenn du wirklich den Host und Port von B nach A schicken willst, musst du Zugriff auf RemoteActorRefProvider über ExtendedActorSystem haben. Der offizielle Weg dazu ist eine Erweiterung . Zum Beispiel:

%Vor%

Und das gibt Ihnen die genaue Adresse, die Sie benötigen, um mit B Fern zu kommunizieren.

(beachte, dass dieser Code mit Akka 2.0.x funktioniert. In 2.1.x kannst du RemoteActorRefProvider vermeiden, indem du system.provider.getDefaultAddress verwendest)

Wenn Sie in Akka Actoradressen auf diese Weise für die Verwendung mit actorFor konstruieren, müssen Sie sicherstellen, dass die Hostnamen genau übereinstimmen.

Wenn das ActorSystem beispielsweise den Host als foo.bar.com ansieht, ignoriert es die Nachrichten, die von einem Remote-Host an actorFor("akka://slave@foo:2555/user/slaverunner")

gesendet werden     
sourcedelica 12.01.2013, 02:49
quelle
1

Ich habe dieses Wrapped String :

bekommen %Vor%

Verwenden von system.settings :

%Vor%

Schauspieler war ein "root" -Schauspieler, in einem von Viktor Klang in einer Mail-Gruppendiskussion vorgeschlagenen Stoffschema, in dem es darum ging, "ob der Schauspieler tot ist" zu bestimmen. Es wurde so erstellt:

%Vor%

von ActorSystem , das wie folgt erstellt wurde:

%Vor%

Getestet in Scala 2.9.2 REPL mit Akka 2.0.3, das ich noch benutze.

Entpacken Sie den tatsächlichen Wert mit Config docs hier: Ссылка

    
idonnie 12.01.2013 00:35
quelle
1

Siehe öffentliche Adresse eines Schauspieler-Systems . Lesen Sie die vollständige Diskussion und beachten Sie, dass "normalerweise" Sie den Host / Port nicht greifen müssen.

    
Patrik Nordwall 12.01.2013 14:54
quelle
1

Verwenden Sie für die letzten akka-Versionen (2.1+) Folgendes:

%Vor%

Der RemotePath ist, was Sie gesucht haben:

  

Ich möchte, dass er mir die Saite zurückgibt   akka: //10.4.20.40: 2555 / Sklave / Benutzer / slaverunner

Verwenden Sie für neuere akka-Versionen (2.5.3) Folgendes:

%Vor%     
Ram Janovski 22.10.2014 10:25
quelle

Tags und Links