我尝试从ActorSelection获取多个ActorRef。有人知道是否可能吗?
我的代码
ActorRef actorRef = Await.result(getContext().actorSelection("/user/regions/*").resolveOne(timeout), timeout.duration());
答案 0 :(得分:1)
使用resolveOne
是不可能的,因为顾名思义它会返回一个引用。您可以向ActorSelection
发送消息,该消息会将消息发送给与选择匹配的每个Actor,并让这些演员回复。如果您使用内置的Identify
消息,则根本不需要更改接收角色。来自http://doc.akka.io/docs/akka/snapshot/scala/actors.html#Identifying_Actors_via_Actor_Selection的文档:
可以通过ActorSelection和路径发送消息 在传递每条消息时会查找ActorSelection。如果 选择与任何演员都不匹配,邮件将被删除。
要获取ActorSelection的ActorRef,您需要发送一个 消息到选择并使用reply()引用的回复 来自演员。所有Actors都有一条内置的Identify消息 将理解并自动回复一个ActorIdentity 包含ActorRef的消息。此消息由特别处理 如果一个具体的名字,在某种意义上遍历的演员 查找失败(即非通配符路径元素不对应 现场演员)然后生成否定结果。请注意 这并不意味着该答复的传递得到保证,它仍然存在 是一个正常的信息。