1

我一直在使用 AKKA 远程处理功能。除了一个问题外,它一直运行良好。如果我尝试根据主机名查找远程参与者,则查找失败。但是,如果我根据 IP 地址进行操作,它可以正常工作。有什么方法可以使它对主机名和 IP 地址统一工作?

我的 application.conf 如下所示:

akka {
  version = "2.0.2"
  actor {
    provider = "akka.remote.RemoteActorRefProvider"
  }
  remote {
    transport = "akka.remote.netty.NettyRemoteTransport"
    netty {
        ...
      use-passive-connections = off
      hostname = ""
      port = 8000
        ...
    }
    ...
  }
}

从另一台机器:

actorSystem.actorFor("akka://MyActorSystem@10.0.0.1:8000/user/MyActor")  //**Works**
actorSystem.actorFor("akka://MyActorSystem@hostname.abc.com:8000/user/MyActor") //**Fails**
4

1 回答 1

0

我也看到了这种行为。我希望 Akka 演员系统能够从java.net.InetAddress.getLocalHost.getHostName.

然而,这似乎并不总是有效。从好的方面来说,将主机名添加到 application.conf 文件应该会产生正确的结果,允许通过context.actorFor("akka://host.domain.com:8000/user/whatever").

即使InetAddress上面的调用产生了所需的主机名字符串,例如在 Scala REPL 中很容易检查,Akka 似乎更喜欢绑定到 IP 地址。如果您希望 Akka 在系统启动时自动绑定到别名,您可以考虑在将 Config 对象(set akka.remote.netty.hostname)传递给ActorSystem.apply.

当然,另一个可能不太理想的选项是简单地在每个部署的节点上设置值。

希望有帮助!

于 2012-09-01T16:34:55.100 回答