我有两个不同ActorSystem的类及其对应的actor。 class1中的actor如何向class2中的actor发送消息?
答案 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.actorFor
或context.actorFor
,您可以检索给定路径的ActorRef
。用户创建的actor的路径始终以/user
开头,并包含所有父actor。因此,如果您有3个actor的层次结构,则路径可以是/user/actorA/actorB/actorC
。
答案 1 :(得分:0)
请参阅docs on Actor Paths。 actor路径包括actor系统。
例如,如果你的演员系统被命名为system1
和system2
,并且你的两个演员都是名为actor1
和actor2
的顶级演员,你可以获得{ {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
就是这样。你可以在任何其他演员中调用它。