如果我在 Akka 中将 ActorSystem 配置为使用临时 tcp 端口(更具体地说,我将 http 端口配置为 0),有没有办法在 ActorSystem 启动后以编程方式获取此端口?
任何使用 actorOf 创建 Actor 的尝试,然后打印出 Actor 路径都会显示本地引用的 Actor。此外,我尝试在事件流上注册 RemoteLifeCycleEvent 侦听器,但这只能在服务器启动后才能完成,因此会错过 RemoteServerStarted 事件。
干得好:
class MyExtensionImpl(system: ExtendedActorSystem) extends Extension {
def address = system.provider match {
case rarp: RemoteActorRefProvider => rarp.transport.address
case _ => system.provider.rootPath.address
}
}
object MyExtension extends ExtensionKey[MyExtensionImpl]
val address = MyExtension(system).address
val port = address.port.getOrElse(sys.error("not a remote actor system"))
(请注意,此代码适用于 Akka 2.0.x。在 2.1.x 中,您可以避免经历RemoteActorRefProvider
通过使用system.provider.getDefaultAddress
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)