1

语境

我正在尝试在节点上运行 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)。这个文档页面对我来说似乎很清楚,但它不起作用......

4

1 回答 1

3

我正在使用的项目基于 akka 2.3.4,其中bind-hostnamebind-port存在配置密钥。我当时升级到最新版本,akka 2.4.1,它解决了这个问题。

于 2016-05-18T16:08:34.220 回答