3

一時的な tcp ポートを使用するように Akka で ActorSystem を構成する場合 (より具体的には、http ポートを 0 に構成します)、ActorSystem の起動後にこのポートをプログラムで取得する方法はありますか?

actorOf を使用してアクターを作成しようとすると、アクター パスを出力すると、ローカルで参照されているアクターが表示されます。さらに、イベント ストリームに RemoteLifeCycleEvent リスナーを登録しようとしましたが、これはサーバーの起動後にのみ実行できるため、RemoteServerStarted イベントを見逃してしまいます。

4

1 に答える 1

3

どうぞ:

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"))

RemoteActorRefProvider(このコードはAkka 2.0.xで動作することに注意してください。2.1.xでは、を使用して通過を回避できますsystem.provider.getDefaultAddress

于 2013-02-21T18:37:16.850 に答える