我有一个 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/