事件采购:在重放事件和收听新的事件时避免项目重复事件

时间:2016-07-05 07:34:20

标签: event-sourcing

在需要构建新视图的场景中,我们可以重播 EventStore 中的所有事件。因此,我们将投射新视图。

因此,我们的想法是部署一个新投影,投影所有旧事件(通过重播),并监听新传入事件并投影它们。

我认为在阅读旧事件和收听新传入事件时可能会出现种族情况。因此,我们可以多次投影同一事件,然后破坏新视图。

那么,在要重放的事件和新的传入事件之间画一条线的好方法是什么?

谢谢!

2 个答案:

答案 0 :(得分:2)

EventStore通过Catch-up Subscriptions

支持此方案

您可以指定流的最开头作为订阅者的起点,然后将处理所有事件直到"现在"然后开始听取进来的事件。

Connection.SubscribeToStreamFrom(
    StreamName, 
    checkpoint, 
    resolveLinkTos,
    OnEventReceived,
    OnLiveProcessingStarted, 
    OnSubscriptionDropped);

当您开始处理直播时,您甚至会收到一个事件。 :)

关于此类事情的更一般性建议:

  1. 使流程不可变,因此如果您收到相同的事件两次并不重要
  2. 在接收端重复删除 - 您需要记录已处理的事件

答案 1 :(得分:0)

从Greg Young的演讲中,我可以总结出 EventStore 的工作原理类似于Atom提要。因此,投影(也称订阅者)会轮询事件,因为 id 跟踪哪个订阅者维护。

然后,EventStore对新投影是否需要重播所有事件一无所知。在Greg Young的话中,EventStore收到了

  

给我一​​些事件'在' x'

之后