gpt4 book ai didi

java - 将消息传递给间接相关的参与者

转载 作者:行者123 更新时间:2023-11-30 08:09:31 25 4
gpt4 key购买 nike

将消息传递给间接相关参与者的最佳方式是什么?假设我有 5 个 Actor ,每个 Actor 都是前一个 Actor ( parent )的 child ,而 Actor #2 有多个 child 。位于底层的 Actor #5(在此示例中,Actor #1 位于顶层)如何能够将消息充分传递给 Actor #2 的间接相关子级之一?

下面的草图:指向表示消息的子 actor 的箭头

现在我知道这里的 actor 选择机制可以工作,但根据官方 Akka 文档,除非您正在使用远程处理,否则应该避免使用它。那么,最好只是在某个地方保存对 Actor #1 的全局单例引用并从那里向下传递消息吗?如果这条链变得更加复杂怎么办?我是否忘记了一些邪恶的设计模式来解决这个问题?

如果之前有人回答过与此类似的问题,如果你能给我链接到它,我将不胜感激,因为我找不到它。

具体来说,我目前在 Java 中使用 Akka。也欢迎基于 Scala 的解决方案。

child actor

最佳答案

在这种情况下,我不会对使用 Actor Selection 有任何问题,但是文档确实指出在可以使用 refs 时最好避免 Actor Selection。如果您以这种方式从 Actor #5 向同一个 child 发送多条消息,您可以预先使用 Actor Selection 通过 resolveOne 获取 ActorRef,然后使用该 ActorRef 进行后续通信。也许是一个合理的妥协。

如果您不想使用 Actor Selection,我不会使用全局单例,而是将 actorRef 作为 Actor 3、4 和 5 的构造函数的一部分,以便将引用传递给 Actor 5。我认为警告 Actor Selection 的相同文档给出了替代方案的答案:

In all other cases ActorRefs can be provided during Actor creation or initialization, passing them from parent to child or introducing Actors by sending their ActorRefs to other Actors within messages.

另一种选择是使用发布和订阅机制:http://doc.akka.io/docs/akka/snapshot/scala/event-bus.html

如果子 actor 已经订阅了一个 channel ,Actor #5 可以在不需要知道订阅者身份的情况下向该 channel 发布消息。

关于java - 将消息传递给间接相关的参与者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32437962/

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