我和我的团队目前在CQRS和事件源系统的读取端工作。 我们希望我们的投影仪只能收听所有事件的一部分,并且我们希望我们的投影仪是幂等的,因为事件可以发布多次。 这是我们当前的架构:
既然放映员不能处理所有事件,那么如何知道未按照正确的顺序接收事件还是已经接收到事件呢?我们无法使用序列号,因为序列号与流相关,而不与事件类型相关。
“投影师”,“投影分类帐”和“投影仪”一词来自this article。
答案 0 :(得分:2)
如何知道我们是否必须重新排列/忽略读取端的事件?
“总线”不是事件顺序的授权者-责任在于事件存储。因此,需要知道事物发生什么顺序的放映员应该查询商店,而不是尝试根据公共汽车上的信息来重建原始顺序。
格雷格·杨(Greg Young)在2014年的演讲Polyglot Data中对这一点进行了很好的讨论。
(放映员可能会通过某些API查询事件存储,而不是直接与存储进行交谈-基于存储中数据的精选原子供稿)。
答案 1 :(得分:0)
就像@VoiceOfUnreason所提出的那样,由于事件被存储在CosmosDB中,因此我们通过抛弃总线并用CosmosDB的变更提要处理器替换了该问题,从而解决了该问题。到目前为止,我们对该解决方案没有任何问题。变更提要处理器具有开箱即用的功能,可以管理检查点并将事件广播到每台投影机!