有没有办法让一个Akka节点知道另一个Akka节点是否重新启动
我有一个akka节点(比如a),它执行引导,一旦完成,就会向另一个akka节点(比如B)发送一条消息,只有这样节点B才会开始执行它的工作。现在的问题是,假设节点A向节点B发送引导消息,然后节点B重新启动,所以当节点B出现时,它将处于等待状态(等待节点A发出引导消息) 有没有办法让节点a知道节点B已重新启动并再次发送消息?供参考的三种解决方案 1) 通过使用有没有办法让一个Akka节点知道另一个Akka节点是否重新启动,akka,akka-cluster,Akka,Akka Cluster,我有一个akka节点(比如a),它执行引导,一旦完成,就会向另一个akka节点(比如B)发送一条消息,只有这样节点B才会开始执行它的工作。现在的问题是,假设节点A向节点B发送引导消息,然后节点B重新启动,所以当节点B出现时,它将处于等待状态(等待节点A发出引导消息) 有没有办法让节点a知道节点B已重新启动并再次发送消息?供参考的三种解决方案 1) 通过使用actorSelection,您可以让nodeB每次启动时向nodeA发送一条消息。然后nodeA就可以知道nodeB的启动了 2) 在节点A
actorSelection
,您可以让nodeB每次启动时向nodeA发送一条消息。然后nodeA就可以知道nodeB的启动了
2) 在节点A上设置事件侦听器
object ClusterDomainEventListener {
def props = Props[ClusterDomainEventListener]
val name = "clusterDomainEventListener"
}
class ClusterDomainEventListener extends Actor {
Cluster(context.system).subscribe(self, classOf[ClusterDomainEvent])
def receive = {
case MemberUp(m) =>
println(m.address)
}
}
诺迪亚:
system.actorOf(ClusterDomainEventListener.props, ClusterDomainEventListener.name)
然后,每次nodeB启动时,nodeA将获得MemberUp
事件,println输出为:akka。tcp://YourActorSystemName@10.192.225.19:2551
,你肯定知道nodeB运行在10.192.225.18:2559
,所以你可以知道B启动了。这是一个有点硬编码
3) 如果可以将角色设置为nodeB akka配置文件:
cluster {
roles = ["nodeB"]
seed-nodes = [
"akka.tcp://YourActorSystemName@10.192.225.18:2551"
]
}
然后您可以重用方法2,但是在案例MemberUp(m)
中,您可以使用if(m.hasRole(“nodeB”)
来知道B已启动,并执行下一步想要做的事情