有没有办法让一个Akka节点知道另一个Akka节点是否重新启动

有没有办法让一个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

我有一个akka节点(比如a),它执行引导,一旦完成,就会向另一个akka节点(比如B)发送一条消息,只有这样节点B才会开始执行它的工作。现在的问题是,假设节点A向节点B发送引导消息,然后节点B重新启动,所以当节点B出现时,它将处于等待状态(等待节点A发出引导消息)

有没有办法让节点a知道节点B已重新启动并再次发送消息?

供参考的三种解决方案

1) 通过使用
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已启动,并执行下一步想要做的事情