java - Akka远程actor部署文档错误

标签 java akka remote-access actor

我创建了一个简单的场景。 以下 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”,但使用文档中所述的配置将 Actor 创建部署到 127.0.0.1:2560:Creating Actors Remotely

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 我想找到远程部署的参与者并发送消息。根据文档: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 上找到 Actor 。但如果我更改为:

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 ,那么我应该看看它部署的地方,对吗? 另外,当在部署的 Actor 处打印父级时,我得到:

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

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

最佳答案

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

关于java - Akka远程actor部署文档错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54678074/

相关文章:

scala - 在 akka/scala 中访问 actor 之外的不可变成员

scala - 为什么 akka Actor 没有 postStart 方法?

java - 如何通过 Java 连接远程 Windows 机器?

java - 开发一个工具来知道谁连接到远程机器?

java - 某些文件格式通过 FTP 损坏

java - 使用RandomAccessFile和多线程时,如何分割大字 rune 件?

java - 替换两个美元符号之间的值

scala - Stackless Scala 播放框架运行时错误

java - 任务恢复InterruptionException但无法在Thread中捕获

macos - 无法使用 XQuartz mac 打开 GUI 应用程序