1

我有两个具有不同 ActorSystem 的类及其相应的演员。class1 中的演员如何向 class2 中的演员发送消息?

4

3 回答 3

5

为什么你有ActorSystem2s?除非你有很好的理由,否则你应该在同一个ActorSystem. 创建一个ActorSystem非常昂贵,通信和错误处理更难。下面是一个简单的actor之间通信的例子:

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.actorForor context.actorFor,您可以检索ActorRef给定路径的一个。用户创建的 Actor 的路径始终以所有父 Actor 开头/user并包括所有父 Actor。因此,如果您有 3 个演员的层次结构,则路径可能是/user/actorA/actorB/actorC.

于 2012-06-26T06:21:56.800 回答
0

请参阅有关 Actor Paths 的文档。演员路径包括演员系统。

因此,例如,如果您的参与者系统被命名为system1and ,并且您的两个参与者都是名为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

我不确定你在问什么。

如果actor类是MyClass并且消息对象是Message,你就这样做

val myInstance = new MyClass()
myInstance ! Message

就是这样。您可以从任何其他参与者中调用它。

于 2012-06-26T02:29:02.307 回答