Akka:如何按角色查找集群中的当前节点?

Akka: How to find the current nodes in a cluster by role?

我正在使用集群,我想按角色 (selector) 向集群中的所有节点发送消息 - 类似于 broadcast,但响应要么是第一次成功,要么是全部失败的。我不想等待超时,例如 ScatterGatherFirstCompletedGroup

我想到的一种方法是创建我自己的广播,但我必须知道我在等待多少演员的回应。万一他们都失败了,我会立即回应。有没有办法通过角色找到集群中的当前节点?

或任何其他建议?

 implicit lazy val actorSystem: ActorSystem = ActorSystem("mysystem")
 lazy val cluster = Cluster(actorSystem)
 cluster.state.members.filter(m => m.hasRole("admin"))

您可能需要考虑将@Patrik Nordwall 的 answer 添加到您的角色条件中,以适应更一般的 find-cluster-nodes 问题——例如在case m if m.status == MemberStatus.Up => m.address中添加m.hasRole(role)的条件,等等

您也可以创建集群广播路由器,然后通过向路由器发送GetRoutees消息来获取其路由。另见 https://doc.akka.io/docs/akka/2.3/scala/routing.html#Managagement_Messages