我正在使用 Akka Actors ,我正在尝试更新我的代码以使用最新的2.0里程碑。 API有所改变,例如Actors的创建现在可以通过名为ActorSystem
的东西来实现。
开始和停止演员也改变了 - 后者可以通过ActorSystems
方法.stop(..)
和.shutdown()
获得。但我可以为我的生活找不到如何启动它们......
文档很好,但似乎缺少一些重要的观点。我觉得有点愚蠢,但你如何在Akka 2.0环境中开始演员?如果我理解正确的话,那么拥有'父母'的演员会在这个父母开始的时候开始 - 那么顶级演员呢?
答案 0 :(得分:26)
在Akka 2.0中,不需要start()方法,因为Actors在ActorSystem
(或其他Actor
)的上下文中实例化时会立即启动 - 但是你需要使用ActorSystem
或Actor
context
提供的方法之一来实例化它们。
因此,例如,如果您有一个名为Actor
的{{1}}子类,则可以使用以下命令启动它:
MyClass
或者,如果你的actor接受了构造函数参数:
val system = ActorSystem()
val myActor = system.actorOf(Props[MyActor])
或者,如果你身处其他演员的身体,
val myActor = system.actorOf(Props(new MyActor("arg1"))
然后你的演员可以立即收到消息,例如
val myActor = context.actorOf(Props(new Actor("arg1"))
即使您的顶级演员也会立即开始,因为2.0中的所有演员都自动处于监督层级中。只要演员使用myActor ! MyMessage
进行实例化,它就可以接收消息了。