繁体   English   中英

在Akka集群中的Actor查找

[英]Actor lookup in an Akka Cluster

我有一个Scala应用程序,我有几个节点。 每个节点都有一个带有主actor的ActorSystem,每个actor必须有一些ActorRef给某些actor(例如“Node 1”有“Actor3”,“Actor3”需要ActorRef为“Actor7”和“Actor8”才能完成它的工作) 。 我的问题是我不知道另一个节点(“Node2”)是否有我正在寻找的“Actor1”或“Actor7”。

我的想法是在每个MemberUp中循环,使用ActorSelection几次并询问每个新成员是否有我正在寻找的actor。 这是我能做到的唯一方法吗? 有没有办法更有效地做到这一点?

ActorSelection的另一种方法可以是查找表。 如果你需要做很多演员选择而且演员创作不是那么动态,那么它可以是更好的解决方案。

在每个节点上,您可以创建一个数据结构,如Map[String,List[String]]第一个键是节点名称,List值是此节点中的actor refs。

特技是当任何节点为其actor(创建,停止)更改时,另一个actor应该注意到其他节点有关更改,因此任何节点都已同步更新的地图。

如果你保证它,那么每个节点都可以查找actor的存在;

map.get(nodeName) match {
  case Some(n) => n.contains(actorName)
  case None => false
}

通过在每个节点上的已知路径上安装DiscoveryActor ,我已经在我们的集群中解决了一个非常类似的问题。 DiscoveryActor的协议有

Register(name, actorRef)
Subscribe(name)
Up(name, actorRef)
Down(name, actorRef)

每个命名的 actor都向其本地DiscoveryActor发送一个Register ,后者又将Up向所有本地用户和其他节点上的所有其他DiscoveryActor广播,然后向其订户广播

DiscoveryActor MemberUp / MemberDown以确定何时查找新的对等DiscoveryActor并广播其本地注册或广播Down以查看已关闭的对等方的注册。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM