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
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:
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")
Ich habe dieses Wrapped String
:
Verwenden von system.settings
:
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:
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: Ссылка
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.
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%