【问题标题】:Actor lookup in an Akka ClusterAkka 集群中的 Actor 查找
【发布时间】:2016-02-06 07:19:39
【问题描述】:

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

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

【问题讨论】:

  • 如果我没有误解你,为什么不使用akka cluster singleton?集群单例 — Akka 文档 doc.akka.io/docs/akka/snapshot/scala/cluster-singleton.html ,您可以像 Fatih Donmez 所说的那样持有 Map[Address,List[ActorRef]] 或使用该单例使用远程路由器生成子工作者

标签: scala akka actor akka-cluster


【解决方案1】:

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

在每个节点上,您可以创建像Map[String,List[String]] 这样的数据结构,第一个键是节点名称,列表值是此节点中的演员参考。

技巧是当任何节点对其参与者进行更改(创建、停止)时,另一个参与者应该通知其他节点有关更改,以便任何节点同步更新地图。

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

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

【讨论】:

  • 但是在 MemberUp 中,我只能访问“member”参数,而且有点受限。我不太明白如何处理那张地图。
  • 那你将如何进行演员选择?您需要有用于远程选择的标识符。我假设您可以向 node{id}/commandActor 发送消息。 CommandActor 处理地图操作,每个节点创建它。
  • 我知道我需要的演员的名字,所以我的想法是在 MemberUp 中使用以下行:context.system.actorSelection(RootActorPath(member.address)/"user"/actorName);
  • 酷然后创建另一个演员。它只负责地图操作。然后处理 ActorCreated(nodeName,actorName), ActorDeleted(nodeName,actorName) .. 在每个命令上更新本地地图。当您在节点中创建/删除新参与者时,向每个节点发送消息,例如 context.system.actorSelection(RootActorPath(member.address)/"user"/mapCommandActor) ! ActorCreated(myNodeName,createdActorName)
【解决方案2】:

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

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

每个namedactor 发送一个Register 到其本地DiscoveryActor,后者又将Up 广播给所有本地订阅者 和所有其他DiscoveryActor' s 在其他节点上,这些节点又向其订阅者

广播

DiscoveryActor 监视 MemberUp/MemberDown 以确定何时寻找新的对等点 DiscoveryActor 并广播其本地注册或广播 Down 以获取已关闭的对等点的注册。

【讨论】:

    猜你喜欢
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    • 2019-04-13
    • 2015-04-12
    • 1970-01-01
    相关资源
    最近更新 更多