Akka:如何查找集群中的当前节点?

Dan*_*ein 6 java scala distributed-computing cluster-computing akka

从Akka演员那里,你怎么能找到集群的节点?也就是说,本地节点认为当前可访问的节点.

谢谢, - 丹尼尔

Jef*_*era 17

你实际上不需要订阅ClusterDomainEventMemberEvent.您只需访问state群集扩展的成员,例如,

val cluster = akka.cluster.Cluster(context.system)

val members = cluster.state.members.filter(_.status == MemberStatus.Up)
Run Code Online (Sandbox Code Playgroud)


Pat*_*all 9

来自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)