1

対応するアクターを持つ異なる ActorSystem を持つ 2 つのクラスがあります。class1 のアクターが class2 のアクターにメッセージを送信するにはどうすればよいですか?

4

3 に答える 3

5

なんで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.

于 2012-06-26T06:21:56.800 に答える
0

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"
于 2012-06-26T12:19:23.417 に答える
-1

あなたが何について尋ねているのかよくわかりません。

アクター クラスがMyClassで、メッセージ オブジェクトが の場合は、そのままMessage実行します。

val myInstance = new MyClass()
myInstance ! Message

以上です。他のアクター内から呼び出すことができます。

于 2012-06-26T02:29:02.307 に答える