语境
我正在尝试在节点上运行 akka 应用程序,并使用 akka 远程处理功能使其与其他节点一起工作。
我的节点有一个 IP 地址 ,10.254.55.10
并且有一个外部 IP 10.10.10.44
,重定向到前者。这个外部 IP 是我希望其他节点与我联系的一个。
从我的 akka 应用程序配置中提取:
akka {
remote {
netty.tcp {
hostname = "10.10.10.44"
port = 2551
bind-hostname = "10.254.55.10"
bind-port = 2551
}
}
}
我知道网络端一切正常,因为当我使用 netcat 监听我的 IP 时,我可以使用外部 IP 通过 telnet 向自己发送消息。
换句话说,在单独的 shell 中运行这两个命令时:
$ nc -l 10.254.55.10 2551
$ telnet 10.10.10.44 2551
我能够与自己通信,证明两个 IP 之间的网络重定向工作正常。
问题
启动应用程序时,它会因绑定错误而崩溃:
INFO Remoting - Starting remoting
ERROR a.r.t.n.NettyTransport - failed to bind to /10.10.10.44:2551, shutting down Netty transport
Exception in thread "main" java.lang.ExceptionInInitializerError
[...]
Caused by: org.jboss.netty.channel.ChannelException: Failed to bind to: /10.10.10.44:2551
[...]
Caused by: java.net.BindException: Cannot assign requested address
[...]
INFO a.r.RemoteActorRefProvider$RemotingTerminator - Shutting down remote daemon.
我认为导致它崩溃的原因是它试图绑定到本地不存在的IP(即10.10.10.44
)。但是我首先不明白的是为什么akka甚至试图绑定到10.10.10.44
,因为它不是我的绑定主机名(即10.254.55.10
)。这个文档页面对我来说似乎很清楚,但它不起作用......