在EventSourcing中,关于订阅的公认智慧是什么?

时间:2019-07-19 14:37:11

标签: c# domain-driven-design cqrs event-sourcing get-event-store

正如标题所示。目前,我正在将GetEventStore后端用于我的活动,并且效果很好。我的困惑在于如何使我的Read存储保持最新状态。

当前,我正在使用

创建追赶订阅
EventStoreConnection.SubscribeToAllFrom(Position.Start, _subscriptionSettings, OnEventMaterialized, OnLiveProcessingStarted, OnSubscriptionDropped);

方法。这很好用,并且我有一种缓存所有特定事件观察器的方法,它们可以很好地构建我的读取模型。

但是,如果我想重播特定聚合的事件怎么办?就目前而言,我需要从头开始重新进行订阅,并使其全部正常工作。到目前为止,我这样做的方法是存储每个观察者的当前Stream Position,将其与订阅进行比较,如果更大,则跳过。

让每个观察者拥有自己的订阅是否更好,这样只能清除一个订阅者?在这种情况下,您如何知道流ID,是否需要保留创建的每个流ID,以便以后重新订阅?

一些代码示例或一些阅读资料将是很棒的。我觉得我在ES难题的最后一部分中没有抓住重点

1 个答案:

答案 0 :(得分:0)

要回答您的一般性问题:是的,每个观察员都应在队列中保持自己的位置。

  

在这种情况下,您如何知道流ID,是否需要保留创建的每个流ID以便以后再订阅?

您的流名称应该是可复制的。我使用的格式是“事件-{AggregateType}-{AggregateId}”。我为GES启用了预测,因此 还存在“ $ events- {AggregateType}”。如果需要,我可以将其用作我的一个观察者的流。

将观察者的配置存储在数据库中可以轻松轻松地添加新的配置:

dict(request.POST)

然后,您可以运行基本使用者可执行文件并将观察者名称作为参数传递。