我想构建一个具有静态 IP 地址和端口的公共(public)服务器的 Actor 系统。会有很多客户端知道服务器的地址。服务器不知道客户端的 IP 地址。
服务器的配置:
akka {
actor {
provider = "akka.remote.RemoteActorRefProvider"
}
remote {
transport = "akka.remote.netty.NettyRemoteTransport"
netty {
hostname = "46.38.232.161"
port = 2552
}
}
}
客户端配置:
akka {
actor {
provider = "akka.remote.RemoteActorRefProvider"
}
remote {
transport = "akka.remote.netty.NettyRemoteTransport"
netty {
port = 2553
}
}
}
客户端可能来自整个互联网。现在我想将消息从客户端上的参与者发送到服务器上的参与者。服务器如何知道将消息发送回哪里?当我将ActorPath
发送到服务器时,他会知道相应的客户端地址,这些不包含客户端的IP地址。
最佳答案
如果您想要通信,可以在您的 application.conf 中将
akka.remote.netty.hostname
属性设置为可访问的 IP 地址或可解析的名称通过网络。实际上,使用 Akka 时,您的“客户端”节点也将是服务器。
如果应用程序启动时地址未知,请考虑 Akka 文档中的以下代码片段:
import akka.actor.ActorSystem
import com.typesafe.config.ConfigFactory
val customConf = ConfigFactory.parseString("""
akka.actor.deployment {
/my-service {
router = round-robin
nr-of-instances = 3
}
}
""")
// ConfigFactory.load sandwiches customConfig between default reference
// config and default overrides, and then resolves it.
val system = ActorSystem("MySystem", ConfigFactory.load(customConf))
关于java - 在不知道远程主机地址的情况下远程控制参与者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13509198/