Frage

Ich definiere einen Akka-Cluster mit der Play-App.

application.conf

akka {
  actor {
    provider = "akka.cluster.ClusterActorRefProvider"
  }
  remote {
    log-remote-lifecycle-events = off
    netty.tcp {
      hostname = "192.168.1.100"
      port = 2552
    }
  }
  cluster {
    seed-nodes = [
      "akka.tcp://application@192.168.1.100:2552",
      "akka.tcp://application@192.168.1.101:2552",
      "akka.tcp://application@192.168.1.102:2552"]
      auto-down-unreachable-after = 10s
  }
}

Dann definiere ich einen Cluster-Listener

class ClusterListener extends Actor with ActorLogging {
  def receive = {
    case state: CurrentClusterState =>
      log.info("Current members: {}", state.members.mkString(", "))
    case MemberUp(member) =>
      log.info("Member is Up: {}", member.address)
    case UnreachableMember(member) =>
      log.info("Member detected as unreachable: {}", member)
    case MemberRemoved(member, previousStatus) =>
      log.info("Member is Removed: {} after {}",
        member.address, previousStatus)
    case _: ClusterDomainEvent => // ignore
  }
}

Und starte meine App so

val clusterListener = Akka.system.actorOf(Props[ClusterListener], "cluster-listener")
  Cluster(Akka.system).subscribe(clusterListener, classOf[ClusterDomainEvent])

Ich starte die App zunächst unter 192.168.1.100, sie verbindet sich.

Dann starte ich die gleiche App 192.16.1.101 Und 192.16.1.102.

Der erste Seed-Knoten erhält jedoch nie ein Join-Event!

Was muss ich tun, damit die anderen Knoten diesem Cluster beitreten können?

War es hilfreich?

Lösung

Ich habe den Grund gefunden.Der Cluster wird in einem Objekt definiert.Und Objekte werden verzögert initialisiert. Rufen Sie also einfach eine beliebige Methode dieses Objekts in der Global.scala auf.Wie dumm von mir!!!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top