4

1 台の PC で複数の akka ノードを実行するにはどうすればよいですか? 現在、私は自分のapplication.confファイルをフォローしています。システムごとに異なるポート番号を追加しましたが、複数のインスタンスを開始できません。エラーは、Address already in use failed to bind.

application.confファイル

remotelookup {
  include "common"

  akka {
    remote.server.port = 2500
    cluster.nodename = "n1"
  }
}

更新:複数のakkaノードは、akkaを使用してリモートマスターノードと通信するさまざまなスタンドアロンサーバーアプリケーションを持っていることを意味します。

4

3 に答える 3

12

私たちが使用しているアプローチは次のとおりです。

application.confシステムごとに異なる設定を作成します。

systemOne {
  akka {
    remote {
      enabled-transports = ["akka.remote.netty.tcp"]
      netty.tcp {
        hostname = ${public-hostname}
        port = 2552
      }
    }
  }
}

systemTwo {
  akka {
    remote {
      enabled-transports = ["akka.remote.netty.tcp"]
      netty.tcp {
        hostname = ${public-hostname}
        port = 2553
      }
    }
  }
}

Application.confはデフォルトの構成ファイルであるため、設定モジュールでシステムの構成を追加します。

object Configs {
  private val root = ConfigFactory.load()
  val one          = root.getConfig("systemOne")
  val two          = root.getConfig("systemTwo")
}

次に、この構成でシステムを作成します。

val one = ActorSystem("SystemName", one)
val two = ActorSystem("AnotherSystemName", two)

システム名が異なる必要があることを忘れないでください

于 2013-07-11T08:09:26.180 に答える
2

情報を にハードコードしたくない場合は、次のapplication.confようにすることができます。

def remoteConfig(hostname: String, port: Int, commonConfig: Config): Config = {
  val configStr = s"""
   |akka.remote.netty.hostname = $hostname
   |akka.remote.netty.port = $port
  """.stripMargin

  ConfigFactory.parseString(configStr).withFallback(commonConfig)
}

次に、次のように使用します。

val appConfig = ConfigFactory.load
val sys1 = ActorSystem("sys1", remoteConfig(args(0), args(1).toInt, appConfig))
val sys2 = ActorSystem("sys2", remoteConfig(args(0), args(2).toInt, appConfig))

ポートに 0 を使用すると、Akka はそれにランダムなポート番号を割り当てますActorSystem

于 2013-07-11T18:24:29.937 に答える
1

問題はポート定義にありました。次のようになるはずです

remotelookup {
  include "common"

  akka {
    remote.netty.port = 2500
    cluster.nodename = "n1"
  }
}

それ以外の場合、akka はデフォルトのポートを使用します。

于 2013-07-11T14:24:13.463 に答える