如何使用 Akka 管理对顶级 actor 的引用

How to manage ref to top-level actor with Akka

如何正确管理对顶级 actor 的引用。

我用那个

object MyController extends Controller {
  lazy val supervisor = Akka.system.actorOf(Props[SupervisorActor])

但是我的测试失败了,因为akka系统在测试之间重新启动了...

测试代码与播放示例非常相似:

class IntegrationSpec extends Specification  {

  "Application" should {

      "example1" in new WithBrowser(WebDriverFactory(FIREFOX)) {
       …
      }
      "example2" in new WithBrowser(WebDriverFactory(FIREFOX)) {
       …
      }

我终于找到了一个 hack,因为 FakeApplication 也使用 Global。 让我知道是否有更好的方法...

object Global extends GlobalSettings {

  var supervisor : ActorRef = null;

  override def onStart(app: Application) {
    supervisor = Akka.system.actorOf(Props[SupervisorActor])

  }
}

[edit] 正如@jean 所建议的,我修改了代码以使用命名的 Actor,因此我不再需要在 object 中保留引用。

override def onStart(app: Application) {
  Akka.system.actorOf(Props[SupervisorActor], "supervisor")
}

我可以通过以下方式检索演员:

context.actorSelection("/user/supervisor")