使用ActorSelection通配符选择子树中的所有akka角色

使用ActorSelection通配符选择子树中的所有akka角色,akka,wildcard,actor,Akka,Wildcard,Actor,akka文档解释了如何在使用ActorSelection()时使用通配符 以下代码将向/user context.actorSelection("/user/*") ! msg 是否可以使用通配符向参与者层次结构中的所有子体(而不仅仅是直接子体)发送消息?我尝试了以下代码,但没有成功: context.actorSelection("/**") ! msg 不,我们不支持“发送给所有后代,无论多深”。我觉得这很容易导致意外行为,并可能被过度使用。您可以执行类似的操作,但需要指定搜索深度,如中

akka文档解释了如何在使用ActorSelection()时使用通配符

以下代码将向
/user

context.actorSelection("/user/*") ! msg
是否可以使用通配符向参与者层次结构中的所有子体(而不仅仅是直接子体)发送消息?我尝试了以下代码,但没有成功:

context.actorSelection("/**") ! msg
不,我们不支持“发送给所有后代,无论多深”。我觉得这很容易导致意外行为,并可能被过度使用。您可以执行类似的操作,但需要指定搜索深度,如中所示:

val top = system.actorOf(p, "a")
val b1 = Await.result((top ? Create("b1")).mapTo[ActorRef], timeout.duration)
val b2 = Await.result((top ? Create("b2")).mapTo[ActorRef], timeout.duration)
val c = Await.result((b2 ? Create("c")).mapTo[ActorRef], timeout.duration)
val d = Await.result((c ? Create("d")).mapTo[ActorRef], timeout.duration)

system.actorSelection("/user/a/*/c/*").tell(Identify(6), probe.ref)
probe.expectMsg(ActorIdentity(6, Some(d)))
probe.expectNoMsg(200.millis)
此外,演员的选择可能不是你所追求的,相反,你可以使用专门用于广播的东西

您可以使用并在那里发布您的广播


或者,如果您在集群环境中,请使用(这里有一个激活器模板:)

谢谢您的解释。我对阿克卡真的很陌生。我还研究了EventBus,并设法在一个简单的示例中使用它。关于这个话题,我想知道是否对某个话题的订户数量有限制/意见。如果我编写了一个模拟应用程序,并且有数百万名演员,那么让他们中的每一个人都订阅EventBus有意义吗?或者这是一种不好的做法?我们已经看到人们以这种方式使用事件总线,我现在无法给出具体的数字,但它或多或少和演员信息发送的速度一样快。从使用它开始,如果遇到麻烦,请分析你的应用程序,找出哪些不符合要求。请随时询问akka用户,如果发生这种情况,请点击此处:)