in pekko-sample-cluster-scala/src/main/scala/sample/cluster/simple/ClusterListener.scala [22:51]
def apply(): Behavior[Event] = Behaviors.setup { ctx =>
val memberEventAdapter: ActorRef[MemberEvent] = ctx.messageAdapter(MemberChange)
Cluster(ctx.system).subscriptions ! Subscribe(memberEventAdapter, classOf[MemberEvent])
val reachabilityAdapter = ctx.messageAdapter(ReachabilityChange)
Cluster(ctx.system).subscriptions ! Subscribe(reachabilityAdapter, classOf[ReachabilityEvent])
Behaviors.receiveMessage { message =>
message match {
case ReachabilityChange(reachabilityEvent) =>
reachabilityEvent match {
case UnreachableMember(member) =>
ctx.log.info("Member detected as unreachable: {}", member)
case ReachableMember(member) =>
ctx.log.info("Member back to reachable: {}", member)
}
case MemberChange(changeEvent) =>
changeEvent match {
case MemberUp(member) =>
ctx.log.info("Member is Up: {}", member.address)
case MemberRemoved(member, previousStatus) =>
ctx.log.info("Member is Removed: {} after {}",
member.address, previousStatus)
case _: MemberEvent => // ignore
}
}
Behaviors.same
}
}