gpt4 book ai didi

akka - 使用 ActorSelection 通配符选择子树中的所有 akka Actor

转载 作者:行者123 更新时间:2023-12-01 23:54:22 25 4
gpt4 key购买 nike

akka 文档解释了在使用 ActorSelection ( http://doc.akka.io/docs/akka/snapshot/general/addressing.html#Querying_the_Logical_Actor_Hierarchy ) 时如何使用通配符。

以下代码将向/user下的所有actor发送消息

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)

此外, Actor 选择可能不是您所追求的,相反,您可以使用专门用于广播的东西;

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

或者,如果您在集群环境中,请使用 DistributedPubSub extension (这是一个带有它的激活器模板: akka-clustering (pubsub) activator template )

关于akka - 使用 ActorSelection 通配符选择子树中的所有 akka Actor ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24905518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com