使用主机名时,AKKA Remoting查找远程actor失败

时间:2012-07-25 02:23:28

标签: remoting lookup actor akka

我一直在使用AKKA远程处理功能。除了一个问题外,它一直运作良好。如果我尝试根据其主机名查找远程actor,则查找失败。但是,如果我基于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**

1 个答案:

答案 0 :(得分:0)

我也看到过这种行为。我希望Akka actor系统从java.net.InetAddress.getLocalHost.getHostName获取系统主机名。

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

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

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

希望有所帮助!