2016-08-03 12 views
2

次のクラスタシングルトンは起動していません。シングルトンクラスタアクタが起動していない

commander = system.actorOf(
    ClusterSingletonManager.props(Commander.props(this), 
    terminationMessage = PoisonPill.getInstance, 
    settings = ClusterSingletonManagerSettings.create(system).withRole("commander") 
), name = "Commander") 

エラーメッセージはスローされません。

ログは、次のとおりです。

[INFO] [2016年8月3日11:43:58.656] [ScalaTestランランニング-ClusterSuite] [akka.remote.Remoting]の開始リモート [INFO] [08/03/2016 11:43:59.007] [ScalaTest-run-running-ClusterSuite] [akka.remote.Remoting]リモート処理が開始されました。アドレスのリスニング:[akka.tcp://[email protected]:59592] [情報] [08/03/2016 11:43:59.035] [ScalaTest-run-running-ClusterSuite] [akka.cluster.Cluster (akka:// galaxyFarFarAway)]クラスタノード[akka.tcp://[email protected]:59592] - 起動中... [情報] [08/03/2016 11:43:59.218] [ScalaTest-クラスタノード[akka.tcp://[email protected]:59592] - 登録されたクラスタJMX MBean [akka:type = Cluster] [情報] [08/03/2016 11:43:59.218] [ScalaTest-running-ClusterSuite] [akka.cluster.Cluster(akka:// galaxyFarFarAway)]クラスタノード[akka.tcp://[email protected] .0.1:59592] - 正常に起動しました [INFO] [08/03/2016 11:43:59.247] [galaxyFarFarAway-akka.actor.default-dispatcher-2] [akka.cluster.Cluster(akka:// galaxyFarFarAway )]クラスタノード[akka.tcp:// galaxyFarFarAway @ 127 .0.0.1:59592] - メトリックはMBeanから取得され、一部のプラットフォームでは正しくない可能性があります。メトリックの精度を高めるには、 'sigar.jar'をクラスパスに追加し、適切なプラットフォーム固有のnative libaryを 'java.library.path'に追加します。理由:java.lang.ClassNotFoundException:org.hyperic.sigar.Sigar [INFO] [08/03/2016 11:43:59.257] [galaxyFarFarAway-akka.actor.default-dispatcher-2] [akka.cluster.Cluster (akka:// galaxyFarFarAway)]クラスタノード[akka.tcp://[email protected]:59592] - メトリックコレクションが正常に開始しました [INFO] [08/03/2016 11:43:59.268] [galaxyFarFarAway- akka.actor.default-dispatcher-3] [akka.cluster.Cluster(akka:// galaxyFarFarAway)]クラスタノード[akka.tcp://[email protected]:59592] - シードノードは設定されておらず、手動クラスタ'127.0.0.1:59574'、輸送: 'ソケット'

設定は次のとおりです。

0123ターゲットVM、アドレスから切断要求さ に参加
akka { 
actor { 
    provider = "akka.cluster.ClusterActorRefProvider" 
    default-dispatcher { 
    throughput = 10 
    } 
} 
cluster { 
    roles = [commander] 
} 

remote { 
    log-remote-lifecycle-events = off 
    netty.tcp { 
    hostname = "127.0.0.1" 
    port = 0 
    } 
} 
akka.extensions=["akka.cluster.metrics.ClusterMetricsExtension"] 
} 

Commanderクラスのコードをデバッグすると、コンストラクタはどこにも呼び出されません。私がClusterSingletonManagerを省略してPropsで作成すると、それは動作しますが、Commanderアクターが作成されます。 この問題の背後にある誤った構成を検出します。あなたにはこれに関する発言はありますか?

答えて

2

あなたはAkkaクラスタリングのシードノード構成を指定していません。あなたは、ログの最後の行でこれを見ることができます:

[akka.tcp://[email protected]:59592] - いいえ、シードノードが構成され、手動でクラスタが必要なターゲットVMから切断されなかった結合、 address: '127.0.0.1:59574'、transport: 'socket'

設定ファイルにシードノードを指定していないため、Akkaはシードノードをプログラムで指定するまで待機します。あなたは、このような設定でシードノードを指定することができます。

akka.cluster.seed-nodes = [ 
    "akka.tcp://[email protected]:2551", 
    "akka.tcp://[email protected]:2552" 
] 

また、あなたがプログラムによって、クラスタに参加するjoinSeedNodesメソッドを呼び出すことができます。いずれの場合も、利用可能なシードノードを少なくとも1つ指定する必要があります。アクターシステム自体は、シードノードとしても機能します。

シードノードが指定され、アクターシステムがクラスタに参加すると、クラスタリング(クラスタシングルトン、シャーディングなど)に応じてAkkaの機能が起動します。これがシングルトンではなく普通の俳優を立ち上げることができる理由です。

シードノードの設定の詳細については、Akka cluster documentationを参照してください。

関連する問題