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

时间:2017-04-03 14:48:30

标签: scala akka broadcast akka-cluster

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

等超时

我想到的一种方法是创建自己的广播,但我必须知道有多少演员在等我回应。如果所有这些都失败了,我会立即做出回应。有没有办法按角色查找集群中的当前节点?

还是其他任何建议?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

您可能需要考虑将@Patrik Nordwall的answer调整为更常见的查找群集节点问题,方法是在其中添加您的角色条件 - 例如在m.hasRole(role)等中添加case m if m.status == MemberStatus.Up => m.address的条件

答案 2 :(得分:0)

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