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