Akka Remote Actor部署文档错误

时间:2019-02-13 19:35:36

标签: java akka remote-access actor

我创建了一个简单的场景。 以下角色系统:

akka.tcp://TestSystem@127.0.0.1:2560
akka.tcp://TestSystem@127.0.0.1:2570
akka.tcp://TestSystem@127.0.0.1:2580

这个想法是从127.0.0.1:2570创建一个“ SampleActor”,但是使用文档Creating Actors Remotely

中所述的配置将actor创建部署到127.0.0.1:2560。
akka {
  actor {
    deployment {
      /sampleActor {
        remote = "akka.tcp://TestSystem@127.0.0.1:2560"
      }
    }
  }
}

然后在127.0.0.1:2570:

system.actorOf(Props.create(SampleActor.class), "sampleActor");

现在从127.0.0.1:2580起,我想找到远程部署的actor并发送一条消息。根据文档:Looking up Remote Actors

ActorSelection selection =
                system.actorSelection("akka.tcp://TestSystem@127.0.0.1:2560/user/sampleActor");
        selection.tell("Pretty slick", ActorRef.noSender());

但是,这不起作用。它无法在127.0.0.1:2560上找到演员。但是如果我更改为:

ActorSelection selection =
                    system.actorSelection("akka.tcp://TestSystem@127.0.0.1:2570/user/sampleActor");
            selection.tell("Pretty slick", ActorRef.noSender());

区别在于,在第一个情况下,我正在寻找部署它的actor,在这种情况下,如文档所述,在127.0.0.1:2560中,而在第二个情况下,我正在寻找actor所在的actor。参与者创建已定义,在这种情况下为127.0.0.1:2570。为什么会发生这种情况?这没有任何意义,如果我正在寻找一个远程演员,那么我应该看看部署它的正确位置吗? 另外,在已部署的actor上打印父级时,我得到:

akka://TestSystem/remote/akka.tcp/TestSystem@127.0.0.1:2570/user

这使它更加混乱,因为它与文档中所述的不一样:The Interplay with Remote Deployment所有这些都使它真正令人困惑,文档很长,并且没有正确解释如何做一些基本的事情正确地。有人可以帮我了解这个问题吗?

1 个答案:

答案 0 :(得分:0)

很显然,这就是akka的工作方式,这很令人困惑。最后,您应该始终将消息发送给“部署者”而不是被部署者。 “部署者”将依次将消息发送给“部署者”。与远程部署相关的所有事物都使用相同的原则。