我一直在使用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**
答案 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
。
当然,另一个可能不太理想的选择是在每个已部署的节点上设置值。
希望有所帮助!