我有两个具有不同 ActorSystem 的类及其相应的演员。class1 中的演员如何向 class2 中的演员发送消息?
问问题
2205 次
3 回答
5
为什么你有ActorSystem
2s?除非你有很好的理由,否则你应该在同一个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.actorFor
or context.actorFor
,您可以检索ActorRef
给定路径的一个。用户创建的 Actor 的路径始终以所有父 Actor 开头/user
并包括所有父 Actor。因此,如果您有 3 个演员的层次结构,则路径可能是/user/actorA/actorB/actorC
.
于 2012-06-26T06:21:56.800 回答
0
请参阅有关 Actor Paths 的文档。演员路径包括演员系统。
因此,例如,如果您的参与者系统被命名为system1
and ,并且您的两个参与者都是名为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"
于 2012-06-26T12:19:23.417 回答
-1
我不确定你在问什么。
如果actor类是MyClass
并且消息对象是Message
,你就这样做
val myInstance = new MyClass()
myInstance ! Message
就是这样。您可以从任何其他参与者中调用它。
于 2012-06-26T02:29:02.307 回答