Dan*_*ein 6 java scala distributed-computing cluster-computing akka
从Akka演员那里,你怎么能找到集群的节点?也就是说,本地节点认为当前可访问的节点.
谢谢, - 丹尼尔
Jef*_*era 17
你实际上不需要订阅ClusterDomainEvent
或MemberEvent
.您只需访问state
群集扩展的成员,例如,
val cluster = akka.cluster.Cluster(context.system)
val members = cluster.state.members.filter(_.status == MemberStatus.Up)
Run Code Online (Sandbox Code Playgroud)
来自Typesafe Activator教程的调整样本:
case object GetNodes
class MemberListener extends Actor {
val cluster = Cluster(context.system)
override def preStart(): Unit =
cluster.subscribe(self, classOf[MemberEvent])
override def postStop(): Unit =
cluster unsubscribe self
var nodes = Set.empty[Address]
def receive = {
case state: CurrentClusterState =>
nodes = state.members.collect {
case m if m.status == MemberStatus.Up => m.address
}
case MemberUp(member) =>
nodes += member.address
case MemberRemoved(member, _) =>
nodes -= member.address
case _: MemberEvent ? // ignore
case GetNodes =>
sender ! nodes
}
}
Run Code Online (Sandbox Code Playgroud)