scala - Akka 集群中的 Actor 查找

标签 scala akka actor akka-cluster

我有一个 Scala 应用程序,其中有多个节点。每个节点都有一个 ActorSystem 和一个主要 Actor ,每个 Actor 必须有一些特定 Actor 的 ActorRef(例如“节点 1”有“Actor3”,“Actor3”需要“Actor7”和“Actor8”的 ActorRef 来完成它的工作) .我的问题是我不知道另一个节点(“Node2”)是否有我正在寻找的“Actor1”或“Actor7”。

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

最佳答案

ActorSelection 的另一种方法是查找表。如果您需要进行大量的 Actor 选择并且 Actor 创建不是那么动态,这可能是更好的解决方案。

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

诀窍是当任何节点为其参与者发生变化(创建、停止)时,另一个参与者应该注意到其他节点的变化,以便任何节点同步更新 map 。

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

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

关于scala - Akka 集群中的 Actor 查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33544857/

相关文章:

class - 用 actor 替换 class 关键字会导致错误

scala - 当存储级别设置为磁盘时,Spark将数据存储在哪里?

scala - 你如何替换actorFor?

scala - 平面 Actor 树

scala - 如何不使用 ScalatestRouteTest 绑定(bind)到本地主机

java - Docker 中的 Akka HTTP

scala - 获取或创建子 Akka actor 并确保 liveness

debugging - 如何编写允许放入解释器的 Scala 2.9 代码

scala - 如何让 sbt 将我的代码所依赖的所有 jar 文件收集到一个地方?

list - 根据多个包含过滤列表