対応するアクターを持つ異なる ActorSystem を持つ 2 つのクラスがあります。class1 のアクターが class2 のアクターにメッセージを送信するにはどうすればよいですか?
3 に答える
なんで2ActorSystem秒なの?よほどの理由がない限り、すべてのアクターを同じ .xml で作成する必要がありますActorSystem。の作成にActorSystemは非常にコストがかかり、通信やエラー処理が難しくなります。アクター間の通信の簡単な例を次に示します。
class Foo extends Actor {
val barActor = context.actorFor("/user/bar")
def receive = {
case 'Send => barActor ! "message from foo!"
}
}
class Bar extends Actor {
def receive = {
case x => println("Got " + x)
}
}
object Main {
def main(args: Array[String]) {
val system = ActorSystem("MySystem")
val foo = system.actorOf(Props[Foo], "foo")
val bar = system.actorOf(Props[Bar], "bar")
foo ! 'Send
}
}
system.actorForまたはを使用して、特定のパスcontext.actorForの を取得できます。ActorRefユーザーが作成したアクターのパスは、常にすべての親アクターから始まり、/userすべての親アクターが含まれます。したがって、3 つのアクターの階層がある場合、パスは/user/actorA/actorB/actorC.
Actor Pathsのドキュメントを参照してください。アクター パスには、アクター システムが含まれます。
たとえば、アクター システムが and という名前system1で、両方のアクターがandsystem2という名前のトップ レベルのアクターである場合、次のように取得できます。actor1actor2ActorRefs
// inside actor1
val actor2 = system.actorFor("akka://system2/user/actor2")
actor2 ! "Foo"
と
// inside actor2
val actor1 = system.actorFor("akka://system1/user/actor1")
actor1 ! "bar"
あなたが何について尋ねているのかよくわかりません。
アクター クラスがMyClassで、メッセージ オブジェクトが の場合は、そのままMessage実行します。
val myInstance = new MyClass()
myInstance ! Message
以上です。他のアクター内から呼び出すことができます。