【问题标题】:Programmatically obtain ephemeral port with Akka使用 Akka 以编程方式获取临时端口
【发布时间】:2014-07-22 06:23:27
【问题描述】:

如果我在 Akka 中配置 ActorSystem 以使用临时 tcp 端口(更具体地说,我将 http 端口配置为 0),一旦 ActorSystem 启动,有没有办法以编程方式获取此端口?

任何尝试使用actorOf 创建一个actor,然后打印出actor 路径都会显示一个本地引用的actor。另外,我尝试在事件流上注册一个 RemoteLifeCycleEvent 监听器,但这只能在服务器启动后完成,因此错过了 RemoteServerStarted 事件。

【问题讨论】:

    标签: scala akka


    【解决方案1】:

    给你:

    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 中,您可以使用 system.provider.getDefaultAddress 避免通过 RemoteActorRefProvider

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多