在 AKKA 中从本地到远程 actor 消息传递

Going from local to remote actor messaging in AKKA

我遵循了推荐的配置:

   akka {
      actor {
        provider = "akka.remote.RemoteActorRefProvider"
      }
      remote {
        enabled-transports = ["akka.remote.netty.tcp"]
        netty.tcp {
          hostname = "127.0.0.1"
          port = 0
        }
      }
    }

我正在像这样创建我的演员系统:

 implicit val system = ActorSystem("system239",  ConfigFactory.load("application")).asInstanceOf[ExtendedActorSystem]

问题是我的 ActorRef 的路径仍然是 'short',即描述本地路径。我错过了什么?

Remoting 并不意味着您会自动让 actor 分布在节点上,因此创建本地 actor 仍然是本地 actor,ActorRef 到它仍然是本地 actor ref。它为您提供的是显式地跨节点部署和交互参与者的能力。

我建议您阅读文档 http://doc.akka.io/docs/akka/2.3.14/scala/remoting.html and maybe take a look at the remoting activator template https://www.typesafe.com/activator/template/akka-sample-remote-scala 以了解 Akka Remoting 的工作原理。

查看分布式系统的集群可能也很有趣,因为它包含更多用于常见用例的工具(跨系统的单例、id 分片、最终一致的数据等),并且在它时更健壮失败了。

另外:Akka 2.3 已经停产,所以开始任何新的东西可能不是一个好主意,改用 2.4(或者至少使用 2.3 的最新版本,即 2.3.14)