我的 akka 项目有一个奇怪的行为。总结一下:我有两个 Actorsystems 在我的主机系统上运行,并且想要从一个连接到另一个以发送消息。现在的问题是,当我在客户端上使用以下 akka 配置时:
akka {
actor {
provider = remote
}
remote {
enabled-transports = ["akka.remote.netty.tcp"]
netty.tcp {
hostname = "127.0.0.1"
port = 0
}
}
}
以及我的服务器actorsystem上的以下内容:
akka {
loglevel = "INFO"
actor {
provider = "akka.remote.RemoteActorRefProvider"
}
remote {
enabled-transports = ["akka.remote.netty.tcp"]
netty.tcp {
hostname = "127.0.0.1"
port = 5150
}
log-sent-messages = on
log-received-messages = on
}
}
我无法使用actorselection 连接到我的服务器actorsystem,如下所示:
val selection = context.actorSelection("akka.tcp://ServerSystem@0.0.0.0:5150/user/receiver")
我希望它可以使用通配符 IP 地址,因为这意味着它试图连接到主机系统拥有的每个 IPv4。我收到以下错误:
[WARN] [05/06/2019 08:57:03.738] [New I/O boss #3] [NettyTransport(akka://ClientSystem)] Remote connection to [null] failed with java.net.ConnectException: Connection refused: no further information: /0.0.0.0:5150
[WARN] [05/06/2019 08:57:03.738] [ClientSystem-akka.remote.default-remote-dispatcher-13] [akka.tcp://ClientSystem@127.0.0.1:8346/system/endpointManager/reliableEndpointWriter-akka.tcp%3A%2F%2FServerSystem%400.0.0.0%3A5150-0] Association with remote system [akka.tcp://ServerSystem@0.0.0.0:5150] has failed, address is now gated for [5000] ms. Reason: [Association failed with [akka.tcp://ServerSystem@0.0.0.0:5150]] Caused by: [java.net.ConnectException: Connection refused: no further information: /0.0.0.0:5150]
另一方面,如果我将服务器配置上的 127.0.0.1 更改为 0.0.0.0 当我在 docker 容器中运行它并使用客户端上的演员选择中的 0.0.0.0 地址连接到它时,它工作得很好,这正在主机上运行。所以在这里它似乎可以绑定和连接到通配符 IP。
有人对这种行为有解释吗?