Akka 远程绑定到主机名而不是绑定主机名
Akka remoting binds to hostname instead of bind-hostname
上下文
我正在尝试 运行 一个节点上的 akka 应用程序,并使用 akka 远程处理功能使其与其他节点一起工作。
我的节点有一个 IP 地址,10.254.55.10
,还有一个外部 IP,10.10.10.44
,重定向到前者。这个外部 IP 是我希望其他节点与我联系的 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
)。 This doc page 对我来说这件事似乎很清楚,但它不起作用...
我正在使用的项目基于akka 2.3.4,其中 bind-hostname
和 bind-port
配置密钥不存在。我当时升级到最新版本,akka 2.4.1,问题解决了。
上下文
我正在尝试 运行 一个节点上的 akka 应用程序,并使用 akka 远程处理功能使其与其他节点一起工作。
我的节点有一个 IP 地址,10.254.55.10
,还有一个外部 IP,10.10.10.44
,重定向到前者。这个外部 IP 是我希望其他节点与我联系的 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
)。 This doc page 对我来说这件事似乎很清楚,但它不起作用...
我正在使用的项目基于akka 2.3.4,其中 bind-hostname
和 bind-port
配置密钥不存在。我当时升级到最新版本,akka 2.4.1,问题解决了。