対応するアクターを持つ異なる 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
という名前のトップ レベルのアクターである場合、次のように取得できます。actor1
actor2
ActorRefs
// 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
以上です。他のアクター内から呼び出すことができます。