Ich weiß, dass Sie Nachrichten senden können und eine Antwort von außerhalb eines Schauspielers erhalten, wenn Sie ask
(?
Syntax) verwenden. Das Problem ist, ich weiß nicht, ob dies getan werden kann, wenn der Schauspieler entfernt ist. Mit "außerhalb eines Schauspielers" meine ich einen normalen Nicht-Schauspieler-Code. Kann ein Nicht-Schauspieler mit einem entfernten Schauspieler sprechen?Kann man mit einem entfernten Akteur von einem Nicht-Akteur kommunizieren?
[] ist die Prozessgrenze und Großschreibung bedeutet, dass es ein Akteur ist. Zuvor war der Aufbau dieser und funktioniert gut:
[a] [B:
[einB]
jedoch jetzt B Fern machen Ich versuche,]
Ich könnte es wahrscheinlich funktionieren, wenn ich [ein] einen lokalen Akteur geben würde, aber das sollte nicht notwendig sein.
In eine gibt es keine ActorContext
, nur eine ActorSystem
. Hier ist der Code, den ich zu verwenden Ich versuche (remote
ist B):
val systemName = "THIS_UNIVERSE"
// other vals: remoteIP, remotePort, remoteActorName - all to do with B
val actorSystem = ActorSystem(systemName)
...
val str = s"akka.tcp://[email protected]$remoteIP:$remotePort/user/$remoteActorName"
actorSystem.actorSelection(str).resolveOne().onComplete {
...
}
Wie Sie auch die Syntax machen nicht viel Sinn sehen: Es gibt bereits ein actorSystem
, doch im Protokoll String systemName
Bedürfnisse verwendet werden.
Ist die Kommunikation mit einem entfernten Akteur von einem Nicht-Akteur möglich? Ich habe keine Beispiele als Referenz gefunden.
Ich weiß tatsächlich, dass B läuft und tatsächlich hat es bereits einen anderen Akteur, der in der Lage ist, es zu finden und mit ihm zu kommunizieren.
Für den Zweck dieser Frage habe ich gerade ein eigenständiges Scala-Programm eingerichtet, das einen Akteur erstellt und versucht, einen actorRef auf B zu erhalten, in ähnlicher Weise wie oben beschrieben. Aber keine Freude:
Actor not found for: ActorSelection[Anchor(akka://THIS_UNIVERSE/deadLetters), Path(/user/MyPLC)]
Ist es der Fall, dass dieses Standalone-Programm benötigt, eine application.conf
zur Verfügung haben geladen werden? d. h. ohne eine solche Datei ist es nicht möglich, entfernte Akteure zu finden?
Großartig - das Standalone-Programm kann den Remote-Actor finden, wenn eine src/main/resources/application.conf
Datei vorhanden ist, die sbt abholen kann.
Also zurück zur ursprünglichen Frage: [a] per Definition wird keine application.conf
Datei in seinem Klassenpfad haben, da es kein Akteur ist. Allerdings werde ich eins hinein und sehen, ob es hilft ...
Das hat geholfen! In diesem Fall wurde application.conf
an die Wurzel einer der abhängigen JAR-Dateien gesetzt.
Also die Antwort auf die Frage ist, dass Sie von einem Nicht-Akteur kommunizieren können, aber Sie brauchen immer noch die meisten Akteure Zeug - die Schauspieler JAR-Dateien und eine application.conf
auf dem Klassenpfad.
Hier haben Sie [** A **] einen Schauspieler gemacht. Aber [** a **] ist nur ein normaler Nicht-Akteur, der Zugang zu [** B **] benötigt. [** a **] ist nur ein Prozess, der * synchron * (mit '?' und 'Await') Fragen von [** B **] stellen möchte, was * hardware * ist. –
Ich folge nicht - du sagtest "Großschreibung bedeutet, dass es ein Schauspieler ist" und dein 'str' Pfad Beispiel ist ein Pfad zu einem Schauspieler. Ich schlage vor, entweder 1) einen lokalen Akteur vorübergehend einzurichten, nur um zu überprüfen, ob der Remote-Pfad korrekt ist, oder 2) einen lokalen Actor als Vermittler zwischen dem Remote-Code und dem Nicht-Actor-Code zu verwenden. Sie werden ein Akteursystem auf der lokalen Seite brauchen, um '' '' '' 'ask'' zu verwenden, es wird nicht schaden, einen lokalen Schauspieler vermitteln zu lassen. – sourcedelica
Nur eine Notiz hinzugefügt, um sicherzustellen, dass die IP-Adresse im Pfad korrekt ist. – sourcedelica