我有一个 Actor 系统,目前接受命令/消息。这些 actor 的状态是持久化的 Akka.Persistance。我们现在要为这个actor系统构建查询系统。基本上我们的问题是我们想要一种方法来获得这些特定参与者的所有状态的汇总/列表。虽然我不是严格订阅 CQRS 模式,但我认为这可能是一种巧妙的方法。
我最初的想法是让一个用于查询的 actor 将正在执行“数据写入”的其他 actor 的状态聚合作为其状态的一部分。为此,这个actor 将订阅它感兴趣的actor,当这些actor 经历某种状态更改时,这些actor 只会向查询actor 发送他们的状态。这是解决这个问题的方法吗?有一个更好的方法吗?
最佳答案
我对实现这种类型的模式的建议是在这里为您的 Actor 使用发布-订阅和推拉式消息传递的组合。
对于每个“聚合”,这个actor 应该能够从您要查询的各个子actor 订阅事件。每当 child 的状态发生变化时,都会将一条消息推送到所有订阅的聚合中,并且每个聚合的状态都会自动更新。
当一个新的聚合上线并且需要检索它错过的状态(从它存在之前)它应该能够从每个 child 那里拉出当前状态并使用它来构建它的当前状态,使用来自 child 的增量更新来保持它的 children 的状态聚合 View 一致。
这是我用于此类工作的模式,它在本地开箱即用。通过网络,您可能必须确保可交付性保证,这通常很容易做到。你可以在那里阅读更多关于如何做到这一点的信息:https://petabridge.com/blog/akkadotnet-at-least-once-message-delivery/
关于akka - 如何对 Actor 集合进行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41880626/