如何从不同的班级向演员发送消息?

时间:2012-06-26 02:21:33

标签: scala akka

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

3 个答案:

答案 0 :(得分:5)

为什么你有2 ActorSystem个?除非你有充分的理由,否则你应该在同一个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.actorForcontext.actorFor,您可以检索给定路径的ActorRef。用户创建的actor的路径始终以/user开头,并包含所有父actor。因此,如果您有3个actor的层次结构,则路径可以是/user/actorA/actorB/actorC

答案 1 :(得分:0)

请参阅docs on Actor Paths。 actor路径包括actor系统。

例如,如果你的演员系统被命名为system1system2,并且你的两个演员都是名为actor1actor2的顶级演员,你可以获得{ {1}}对他们来说像是:

ActorRefs

// inside actor1
val actor2 = system.actorFor("akka://system2/user/actor2")
actor2 ! "Foo"

答案 2 :(得分:-1)

我不确定你在问什么。

如果actor类是MyClass且消息对象是Message,那么你就是

val myInstance = new MyClass()
myInstance ! Message

就是这样。你可以在任何其他演员中调用它。