【问题标题】:Singleton cluster actor is not starting up单例集群参与者未启动
【发布时间】:2016-12-08 23:23:17
【问题描述】:

以下集群单例未启动。

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

没有错误消息被抛出。

日志是:

[INFO] [08/03/2016 11:43:58.656] [ScalaTest-run-running-ClusterSuite] [akka.remote.Remoting] 开始远程处理 [信息] [08/03/2016 11:43:59.007] [ScalaTest-run-running-ClusterSuite] [akka.remote.Remoting] 远程处理开始;监听地址:[akka.tcp://galaxyFarFarAway@127.0.0.1:59592] [信息] [08/03/2016 11:43:59.035] [ScalaTest-run-running-ClusterSuite] [akka.cluster.Cluster(akka://galaxyFarFarAway)] 集群节点 [akka.tcp://galaxyFarFarAway@127.0 .0.1:59592] - 正在启动... [信息] [08/03/2016 11:43:59.218] [ScalaTest-run-running-ClusterSuite] [akka.cluster.Cluster(akka://galaxyFarFarAway)] 集群节点 [akka.tcp://galaxyFarFarAway@127.0 .0.1:59592] - 注册集群 JMX MBean [akka:type=Cluster] [信息] [08/03/2016 11:43:59.218] [ScalaTest-run-running-ClusterSuite] [akka.cluster.Cluster(akka://galaxyFarFarAway)] 集群节点 [akka.tcp://galaxyFarFarAway@127.0 .0.1:59592] - 成功启动 [信息] [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”添加到类路径,并将适当的特定于平台的本机库添加到“java.library.path”。原因:java.lang.ClassNotFoundException:org.hyperic.sigar.Sigar [信息] [08/03/2016 11:43:59.257] [galaxyFarFarAway-akka.actor.default-dispatcher-2] [akka.cluster.Cluster(akka://galaxyFarFarAway)] 集群节点 [akka.tcp:/ /galaxyFarFarAway@127.0.0.1:59592] - 指标收集已成功开始 [信息] [08/03/2016 11:43:59.268] [galaxyFarFarAway-akka.actor.default-dispatcher-3] [akka.cluster.Cluster(akka://galaxyFarFarAway)] 集群节点 [akka.tcp:/ /galaxyFarFarAway@127.0.0.1:59592] - 没有配置种子节点,需要手动加入集群 与目标VM断开连接,地址:'127.0.0.1:59574',传输:'socket'

配置是:

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 演员。 我感觉到这个问题背后的配置不正确。大家对此有什么意见吗?

【问题讨论】:

    标签: scala akka cluster-computing akka-cluster


    【解决方案1】:

    您的感觉非常正确:您没有为 Akka 集群指定种子节点配置。您可以在日志的最后一行看到这一点:

    [akka.tcp://galaxyFarFarAway@127.0.0.1:59592] - 未配置种子节点,需要手动加入集群已与目标 VM 断开连接,地址:'127.0.0.1:59574',传输:'socket'

    由于您没有在配置文件中指定任何种子节点,Akka 将等待您以编程方式指定种子节点。您可以像这样在配置中指定种子节点:

    akka.cluster.seed-nodes = [
      "akka.tcp://yourClusterSystem@127.0.0.1:2551",
      "akka.tcp://yourClusterSystem@127.0.0.1:2552"
    ]
    

    或者,您可以调用joinSeedNodes 方法以编程方式加入集群。在这两种情况下,您都必须指定至少一个可用的种子节点。 Actor 系统本身也可以充当种子节点。

    一旦指定了种子节点并且参与者系统加入了集群,依赖于集群的 Akka 特性(集群单例、分片等)将启动。这就是为什么您可以启动普通演员,但不能启动单例。

    有关设置种子节点的更多信息,请参阅Akka cluster documentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-11
      • 2016-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-28
      • 2016-11-30
      相关资源
      最近更新 更多