您可以維護其他節點的地址與對應的ActorRef-S(或演員路徑)對他們的列表(或地圖)。您可以訂閱羣集消息(如UnreachableMember),並在收到消息時進行恢復。
像這樣:
class ClusterRefRecoverExample extends Actor {
private val membersWithActorRefs = collection.mutable.HashMap[Address, ActorRef]()
override def preStart() {
super.preStart()
val cluster = Cluster(context.system)
cluster.subscribe(self, classOf[MemberEvent])
cluster.subscribe(self, classOf[UnreachableMember])
}
override def postStop() {
super.postStop()
Cluster(context.system).unsubscribe(self)
}
def recoverAddress(addr: Address) {
membersWithActorRefs.get(addr) foreach {
theRef =>
// do your recover here
}
}
def removeAddress(addr: Address) {
membersWithActorRefs.remove(addr)
}
def receive = {
....
case UnreachableMember(member) =>
recoverAddress(member.address)
case MemberRemoved(member, _) =>
removeAddress(member.address)
case MemberExited(member) =>
removeAddress(member.address)
}
}
謝謝我試過了。非常有用〜 – user3034824